<% 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迭代器变量修改它,我无法看到任何方法。非常感谢任何想法
答案 0 :(得分:5)
我不想简单回答一下在rails世界中通常有些困难的问题,但如果可以,请考虑升级到rails 2.3(它现在是一个候选版本,并且可能会在本周日发布)。
恕我直言,这个版本的最大特点是嵌套的模型形式更容易。
请点击rails 2.3发行说明,而不是尝试在此解释,http://guides.rubyonrails.org/2_3_release_notes.html#nested-object-forms
我希望这会有所帮助。
答案 1 :(得分:0)
结帐ActivePresenter。它会帮助你做你想做的事。