【发布时间】:2010-10-19 14:17:36
【问题描述】:
我正在尝试将表单中的许多新对象保存到一个预先存在的父对象。
- form_for :parent_object do |f|
这是我表格的开始。然后在其中,我会这样做:
- 2.times do
- fields_for :child_object do |f|
现在,如果我要保存它,它将呈现为 ParentObject_Controller 更新操作,该操作将失败,因为更新无法识别新对象。
因此,如果我想呈现适当的保存操作,我必须这样设置:
- form_for [@parent_object, @child_object] do |f|
- 2.times do
- fields_for :child_object do |f|
然后此表单呈现保存操作,但仅保存最后一个 child_object。
我会向您展示我的控制器,但几乎没有意义,因为它非常错误。
我的问题是,如何将表单中的许多新对象保存到一个预先存在的父对象?
我广泛研究了 Ryan Bate 的作品,以及许多其他博客和关于此的 SO 帖子。似乎没有什么真正指向专门为一个预先存在的父对象创建新的子对象。
更新:
我的印象是我必须为 def update 切换 parent_object 的控制器操作。
elsif params[:parent_object][:child_object]
@child_object = Child_Object.new(params[:child_object])
if @child_object.valid? && @parent_object.referrals << @child_object
redirect_to new_parent_object_child_object_path(@parent_object)
else
render :action => :new
end
在调试器中,如果我将调试器放在def update 的根目录下,然后写:
>> params[:parent_object]
#=> nil
有趣!这意味着当 child_object 发送到 parent_object 控制器时,不会为其填写参数。哈哈,虽然不知道怎么办..
不幸的是,该代码不起作用,这只是我试图接近。 ;)
【问题讨论】:
标签: ruby-on-rails forms model nested-forms