post.rb模型
after_update :assign_owner
def assign_owner
self.owner = "test"
end
上述方法适用于终端,但不会更改Rails中Post.new.owner的值。我错过了什么?
答案 0 :(得分:4)
这是更新后(对象需要保存)所以
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
答案 1 :(得分:1)
after_update仅在您更新对象时触发。创建时,after_update不会调用。
如果要在创建新对象时调用方法,可以使用after_create回调。
after_create :assign_owner
after_update :assign_owner
def assign_owner
self.owner = "test"
end
答案 2 :(得分:0)
after_update
和after_create
。您确实设置了owner
的值,但是您没有保存它。
两种可能的选择:使用before_update
代替 - &gt;您的对象尚未保存,您的更改将得到正确保存。
或使用after_update
并按如下方式编写:
def assign_owner
self.update_attribute :owner, "test"
end
注意:任何回调只会在保存之前或之后立即调用,因此Post.new.owner
仍然是错误的。但Post.create(:context => 'blabla')
应正确触发(或Post.new.save
)。
希望这有帮助。