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

时间:2009-03-06 18:15:20

标签: 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:worksheet)

  

<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迭代器变量修改它,我无法看到任何方法。非常感谢任何想法

2 个答案:

答案 0 :(得分:5)

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

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

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

我希望这会有所帮助。

答案 1 :(得分:0)

结帐ActivePresenter。它会帮助你做你想做的事。