2
我遇到了以干净方式创建带有嵌套关联的新记录的问题。这里的控制器代码:Ruby on Rails - 使用需要此记录的嵌套关联保存新记录
@listing = current_user.listings.build(params[:listing].permit(ATTRIBUTES_FOR_CREATE))
这将构建一个实体与多个嵌套的关联,就像这样:
class ListingDataField < ActiveRecord::Base
belongs_to :listing
validates_presence_of :listing
end
然而,当我在控制器做@listing.save
,我得到这些嵌套ListingDataField实体验证错误的是'列表不能为空'。如果我理解正确,AutosaveAssociation首先验证并保存嵌套关联,并最终保存顶层实体。因此,它无法验证ListingDataField,因为Listing尚未保存。
但我相信这是正确的:ListingDataField中的验证,所以我不会考虑删除它。我可以看到2个解决方案:
- 在交易 - 保存清单记录,然后通过一个
@listing.save(:validate => false)
建立嵌套协会 一个但这是太丑陋了
两者都没有那么多的优雅current_user.listings.build(...)
,所以我的问题是 - 这是什么适当的Rails方式?
P.S.我搜索SO类似的问题,但我找不到任何,希望这不是重复:)
完美!事实上,我错过了这个开关 – neolancer