我在我的一个Rails模型中使用accepts_nested_attributes_for,我想在创建父代后保存子代。
该表单可以正常运行,但是验证失败。为简单起见,请想象以下内容:
class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
validates_presence_of :project_id
validates_associated :project
end
我正在跑步:
Project.create!(
:name => 'Something',
:task_attributes => [ { :name => '123' }, { :name => '456' } ]
)
保存项目模型后,任务验证失败,因为它们没有project_id(因为尚未保存项目)。
看起来Rails遵循以下模式:
- 验证项目
- 验证任务
- 保存项目
- 保存任务
该模式应为:
- 验证项目
- 通过时:保存项目并继续...
- 验证任务
- 通过时:保存任务
- 失败:删除项目(也许回滚?)
所以我的问题可以归结为:如何在保存了父项(项目)之后如何让Rails运行project_id =(或project =)方法并在子项(任务)上进行验证,但没有保存父项(项目)模型是否有任何孩子(任务)无效?
有任何想法吗?