post.rb 模型
after_update :assign_owner
def assign_owner
self.owner = "test"
end
上述方法在终端中有效,但不会改变 Rails 中 Post.new.owner 的值。我错过了什么?
post.rb 模型
after_update :assign_owner
def assign_owner
self.owner = "test"
end
上述方法在终端中有效,但不会改变 Rails 中 Post.new.owner 的值。我错过了什么?
这是更新后(需要保存对象)所以
post = Post.new.save
然后
post.owner # will be test
如果你想这样做,你可能想使用after_initialize
例如在 post.rb
class Post < ActiveRecord::Base
protected
def after_initialize
self.owner = "test
end
end
after_update 仅在您更新对象时触发。创建时不会调用 after_update。
当您想在创建新对象时调用方法时,可以使用 after_create 回调。
after_create :assign_owner
after_update :assign_owner
def assign_owner
self.owner = "test"
end
after_update
并after_create
在对象保存后调用。您确实设置了的值,owner
但没有保存它。
两种可能的选择:before_update
改用 --> 您的对象尚未保存,您的更改将正确保存。
或者使用after_update
并写成如下:
def assign_owner
self.update_attribute :owner, "test"
end
注意:任何回调只会在保存之前或之后调用,所以Post.new.owner
仍然是错误的。但Post.create(:context => 'blabla')
应该正确触发它(或Post.new.save
)。
希望这可以帮助。