我们有两个模型 - ModelA和ModelB。当我们创建/保存ModelA的实例时,我们需要为ModelB批量插入(需要ModelA id,ModelA和ModelB之间没有关联)。我们通过在ModelA的after_save回调中运行后台作业来实现这一点。
问题在于,ModelB的批量插入不正确,因为ModelA未永久保存在数据库中。所以我们决定使用after_commit。但是我们还需要ModelA的实例状态(在after_save中)。我们将此状态分配给after_save中的一个变量并在after_commit中访问它。
活动记录after_Save和after_commit回调在ModelA的当前实例上是否是线程安全的?
答案 0 :(得分:0)
我假设您的协会是:
ModelA has_many :modelBs
ModelB belongs_to :modelA
而不是运行模式的保存,然后运行模型的保存,你应该在一个事务中完成所有操作,rails会为你完成大部分工作。
@modelA = ModelA.new(params[:modelA])
@modelA.modelBs.new(params[:modelB].values)
@modelA.save
当然,如果您遵循rails参数约定
<form action=(modela_url) post>
<input name='modelA[`attr`]' ...
<input name='modelA[`attr`]' ...
<!-- multiple sub model objects
<input name='modelB[1][`attr`]' ...
<input name='modelB[2][`attr`]' ...