Rails4:从子窗体创建父对象时访问父对象



我有关联

交付模式

class Delivery < ActiveRecord::Base
  belongs_to :schedule, inverse_of: :deliveries
  accepts_nested_attributes_for :schedule
end

进度模型

class Schedule < ActiveRecord::Base
  has_many :deliveries, inverse_of: :schedule
  include PushUpdates
  def offer
    deliveries.last.try(:offer)
  end
end

推送更新:应用程序/模型/关注/push_updates.rb

module PushUpdates
  extend ActiveSupport::Concern
  included do
    after_create {update_client_store :create unless Rails.env.test? }
    after_update {update_client_store :update unless Rails.env.test? }
  end
  def update_client_store(operation)
    ...
    self.offer
  end
end

现在,在保存交货的同时,我也接受一组时间表详细信息。

当它保存交付和计划时,after_create计划模型调用回调,当它试图找出deliveries.last时,它会给出nil值。由于我接受它作为嵌套属性的一部分,那么交付对象应该可用于它,但它仍然提供nil值。

我在这里错过了什么吗?谢谢。

在我看来

,Rails正在尝试在提交相关记录之前进行数据库调用。

还有一个额外的回调,您可以查看after_commit(代替记录提交到您正在使用的任何数据库后触发的after_create

这应该意味着您的deliveries.last应该返回非空。您也可以使用 self.reload 强制对模型进行数据库查找,尽管这可能会导致意外行为。

最新更新