【问题标题】:Cannot access children in after_create method in Rails 5无法在 Rails 5 的 after_create 方法中访问子级
【发布时间】:2017-10-18 13:18:17
【问题描述】:

在我的应用中,我有预订和乘客,其中一个预订有很多乘客。

创建新预订后,我想向所有乘客发送通知,因此在我的预订模型中:

after_create :send_notification

def send_notification
  self.passengers.each do |passenger|
    #DO STUFF
  end
end

这没有任何作用,如果我尝试

puts(self.passengers.count)

它返回 0。

当我使用 after_save 时,一切正常,所以我假设 after_create 它创建了父级但尚未创建子级。

问题是我不能使用after_save,因为这个触发器也在更新后。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您可以为after_save添加条件:

    after_save :send_notification, if: :id_changed?
    # or :id_previously_changed? I don't remember if in after_save you can access dirty attributes
    

    【讨论】:

      【解决方案2】:

      将您的回调更改为:

      after_save :send_notification, on: :create
      

      这样您的回调将在保存而不是创建对象后触发,但在首次创建时发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 2021-10-18
        相关资源
        最近更新 更多