无法在Rails 5中的after_create方法中访问子级

时间:2017-10-18 13:18:18

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

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

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

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,因为此更新后也会触发。

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

将您的回调更改为:

after_save :send_notification, on: :create

这样您的回调会在保存后触发而不是创建对象,但仅在首次创建时才会出现。