1

post.rb 模型

   after_update :assign_owner

   def assign_owner
      self.owner = "test"
   end

上述方法在终端中有效,但不会改变 Rails 中 Post.new.owner 的值。我错过了什么?

4

3 回答 3

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
于 2011-03-27T04:32:36.357 回答
1

after_update 仅在您更新对象时触发。创建时不会调用 after_update。

当您想在创建新对象时调用方法时,可以使用 after_create 回调。

  after_create :assign_owner
   after_update :assign_owner

   def assign_owner
      self.owner = "test"
   end
于 2011-03-27T07:03:00.593 回答
0

after_updateafter_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)。

希望这可以帮助。

于 2011-03-27T09:19:56.057 回答