before_update语法
post.rb 模型
after_update :assign_owner
def assign_owner
self.owner = "test"
end
上述方法在终端中有效,但不会更改 Rails 中 Post.new.owner 的值。我缺少什么?
post.rb Model
after_update :assign_owner
def assign_owner
self.owner = "test"
end
The above method works in terminal but does not change the value of Post.new.owner in Rails. What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是更新后(需要保存对象),所以
如果
您想这样做,您可能需要
在 post.rb 中使用
after_initialize
This is an after update (object needs to be saved) so
Then
If you wanna do this you may want to use
after_initialize
for e.g in post.rb
after_update 仅在您更新对象时触发。 after_update在创建时不会调用。
当您想调用创建新对象的方法时,可以使用 after_create 回调。
after_update only fires when you update your object. after_update will not call when you create.
You can use after_create callback when you want to call method on creating new object.
after_update
和after_create
在对象保存后调用。您确实设置了owner
的值,但没有保存它。两种可能的选择:使用
before_update
代替 -->您的对象尚未保存,您的更改将正确保存。或者使用
after_update
并按如下方式编写:注意:任何回调只会在保存之前或之后立即调用,因此
Post.new.owner
仍然会出错。但是Post.create(:context => 'blabla')
应该正确触发它(或Post.new.save
)。希望这有帮助。
after_update
andafter_create
are called after the object is saved. You do set the value of theowner
but you don't save it.Two possible options: use
before_update
instead --> your object is not yet saved and your change will be saved correctly.Or use
after_update
and write it as follows:Note: any callback will only be called right before or right after saving, so
Post.new.owner
will still be wrong. ButPost.create(:context => 'blabla')
should trigger it correctly (orPost.new.save
).Hope this helps.