【发布时间】:2014-03-13 22:08:18
【问题描述】:
如果其中一条记录未通过验证,则使用嵌套关联创建记录将无法保存任何关联记录。
class Podcast < ActiveRecord::Base
has_many :episodes, inverse_of: :podcast
accepts_nested_attributes_for :episodes
end
class Episode < ActiveRecord::Base
belongs_to :podcast, inverse_of: :episodes
validates :podcast, :some_attr, presence: true
end
# Creates a podcast with one episode.
case_1 = Podcast.create {
title: 'title'
episode_attributes: [
{title: "ep1", some_attr: "some_attr"}, # <- Valid Episode
]
}
# Creates a podcast without any episodes.
case_2 = Podcast.create {
title: 'title'
episode_attributes: [
{title: "ep1", some_attr: "some_attr"}, # <- Valid Episode
{title: "ep2"} # <- Invalid Episode
]
}
我希望case_1 能够成功保存一个已创建的剧集。
我希望case_2 做以下两件事之一:
- 保存一集
- 由于验证错误而无法保存。
相反,播客会保存,但两集都没有。
我希望在保存任何有效剧集的同时保存播客。
我想通过将接受嵌套属性行更改为来拒绝无效剧集
accepts_nested_attributes_for :episodes, reject_if: proc { |attributes| !Episode.new(attributes).valid? }
但是每一集都是无效的,因为它们还没有podcast_id,所以它们会失败validates :podcast, presence: true
【问题讨论】:
标签: ruby-on-rails nested-attributes