【问题标题】:How to know when has_many attributes has changed in Rails?如何知道 Rails 中的 has_many 属性何时发生变化?
【发布时间】:2019-10-08 05:08:35
【问题描述】:

我有一个 has_many 直通关系,例如车辆 has_many 配件。在车辆表上,附件保存为附件 ID。当 Accessories_ids 更改时,如何在车辆对象上执行 after_save 回调? 另外,我尝试了saved_change_to_accessories_ids,它似乎不起作用。

【问题讨论】:

  • 你的意思是它似乎不起作用?请分享您的代码。另外,只是为了确保...您使用的是saved_change_to_accessories_ids?(带问号)吗?
  • 在使用它时,我会收到一条带有NoMethodError (undefined method saved_change_to_accessories_ids? for Booking) 的错误消息。
  • 如果你能包含模型代码以及你想做的事情,那就太好了,这样我们就可以给解决方案提供建议和清晰的解释。

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

解决此问题的一种巧妙方法是在 before_save 中设置实例变量。

before_save :set_initial_accessories_ids

private

def set_initial_accessories_ids
  @initial_accessories_ids = self.accessories_ids
end

现在在你的after_save 回调中你可以使用这个变量。

def your_callback
  if @initial_accessories_ids.present? && @initial_accessories_ids != self.accessories_ids
    # do something
  end
end

这可能不是最好的解决方案,但应该适用于您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多