我在我的模型观察者中设置了一个 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
是否有人对处理此问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?
使用saved_change_to_published?:
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).
saved_change_to_attribute?(:published)
警告 这种方法适用于 Rails 5.1(但在 5.1 中已弃用,并且在 5.2 中有重大更改)。您可以阅读有关此拉取请求中的更改。
这种方法适用于 Rails 5.1(但在 5.1 中已弃用,并且在 5.2 中有重大更改)。您可以阅读有关此拉取请求中的更改。
在after_update模型上的过滤器中,您 可以 使用_changed?访问器。例如:
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
它只是工作。