我有协会
交付模式
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
PushUpdates:app / model / concerns / 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
值。
我在这里遗漏了什么?感谢。
答案 0 :(得分:0)
在我看来,Rails正在尝试在提交相关记录之前进行数据库调用。
有一个额外的回调你可以查看after_commit
(代替after_create
,一旦记录被提交到您正在使用的数据库,就会被触发。
这应该意味着你的deliveries.last
应该非空。您还可以使用self.reload
强制在模型上进行数据库查找,但这可能会导致意外行为。