before_update语法

发布于 2024-10-27 09:04:53 字数 185 浏览 1 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清泪尽 2024-11-03 09:04:54

这是更新后(需要保存对象),所以

post = Post.new.save

如果

post.owner  # will be test

您想这样做,您可能需要

在 post.rb 中使用 after_initialize

class Post < ActiveRecord::Base
  protected
    def after_initialize
      self.owner = "test
    end
end

This is an after update (object needs to be saved) so

post = Post.new.save

Then

post.owner  # will be test

If you wanna do this you may want to use after_initialize

for e.g in post.rb

class Post < ActiveRecord::Base
  protected
    def after_initialize
      self.owner = "test
    end
end
红衣飘飘貌似仙 2024-11-03 09:04:54

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

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

  after_create :assign_owner
   after_update :assign_owner

   def assign_owner
      self.owner = "test"
   end

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_create :assign_owner
   after_update :assign_owner

   def assign_owner
      self.owner = "test"
   end
以往的大感动 2024-11-03 09:04:54

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

希望这有帮助。

after_update and after_create are called after the object is saved. You do set the value of the owner 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:

def assign_owner
  self.update_attribute :owner, "test"
end

Note: any callback will only be called right before or right after saving, so Post.new.owner will still be wrong. But Post.create(:context => 'blabla') should trigger it correctly (or Post.new.save).

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文