Rails表单,以一种形式创建多个父母和子女

bra*_*rad 2 ruby-on-rails

我早些时候问了这个问题,但我要改一下.我有一个工作表,用户可以创建许多目标,每个目标都有许多属性(选择指定attribute_id的).每个目标都是通过jscript添加的.来自ryan bates的多模型截屏视频解释了如何动态添加多个孩子,但没有深入研究多个父母.代码

<% fields_for "target_attributes[]", Target.new do |target| -%> <%= target.select("id",@classification_hash[classification_type.id].collect{|c| [c.name,c.id]}

给我选择元素(form_for:工作表)

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][][attribute_id]">

并将所有目标属性放入传递的参数中的哈希数组中,这很好.所以我认为我可以采用这种逻辑并拥有一个嵌套的fields_for,然后将我的所有目标及其属性放入自己的数组中

<% fields_for "worksheet[]",Worksheet.new do |worksheet| -%> <% worksheet.fields_for "target_attributes[]", Target.new do |target| -%> <%= target.select("id",@classification_hash[classification_type.id].collect{|c| [c.name,c.id]}

给我形式

<select id="worksheet__target_id" class="selectbox" name="worksheet[][target_attributes][][attribute_id]">

所以,我想我的所有目标都将在他们自己的阵列中,并且所有人都会变成肉汁,但我在我的参数中得到了这个:

worksheet"=>
  [{"target_attributes"=>[{"id"=>"12"}]},
   {"target_attributes"=>[{"id"=>"15"}]},
   {"target_attributes"=>[{"id"=>"17"}]},
   {"target_attributes"=>[{"id"=>"14"}]},
   {"target_attributes"=>[{"id"=>"16"}]},
   {"target_attributes"=>[{"id"=>"17"}]}]

(注意,每个目标有3个target_attribute选项,因此列出了具有3个属性的两个目标)因此,显然我无法在控制器中以这种方式分隔每个目标以创建新的目标对象.谁能帮我吗?我喜欢一个看起来像这样的表格:

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][0][][attribute_id]"> (每次目标属性3次)

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][1][][attribute_id]"> 等添加的每个目标等

然后我有一个新的"行"基本上为每个新任务.但是如果没有一些混乱的Javascript来评估选择名称并根据一些Javascript迭代器变量修改它,我无法看到任何方法.任何想法都非常感谢

efa*_*cao 5

我不想简单回答在rails世界中通常有些困难的问题,但如果可以,请考虑升级到rails 2.3(它现在是一个候选版本,并且可能会在本周日发布).

恕我直言,这个版本的最大特点是嵌套模型形式更容易.

请参阅rails 2.3发行说明,而不是尝试在此解释它:http://guides.rubyonrails.org/2_3_release_notes.html#nested-object-forms

我希望这有帮助.