小编典典

确定 Rails after_save 回调中更改了哪些属性?

all

我在我的模型观察者中设置了一个 after_save 回调,以仅在模型的 发布 属性从 false 更改为 true 时发送通知。既然方法等 变了?
仅在保存模型之前有用,我目前(但未成功)尝试这样做的方式如下:

def before_save(blog)
  @og_published = blog.published?
end

def after_save(blog)
  if @og_published == false and blog.published? == true
    Notification.send(...)
  end
end

是否有人对处理此问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?


阅读 79

收藏
2022-07-29

共1个答案

小编典典

导轨 5.1+

使用saved_change_to_published?

class SomeModel < ActiveRecord::Base
  after_update :send_notification_after_change

  def send_notification_after_change
    Notification.send(...) if (saved_change_to_published? && self.published == true)
  end

end

或者,如果您愿意,saved_change_to_attribute?(:published).

导轨 3‘5.1

警告

这种方法适用于 Rails 5.1(但在 5.1 中已弃用,并且在 5.2
中有重大更改)。您可以阅读有关此拉取请求中的更改。

after_update模型上的过滤器中,您 可以 使用_changed?访问器。例如:

class SomeModel < ActiveRecord::Base
  after_update :send_notification_after_change

  def send_notification_after_change
    Notification.send(...) if (self.published_changed? && self.published == true)
  end

end

它只是工作。

2022-07-29