具有多个相同键名的嵌套表单

时间:2013-07-28 20:14:54

标签: ruby-on-rails ruby nested-forms

我试图将以下参数转换为Rails表单。

{:routine=>{
 :name=>"Test"}, 
  :arbitrary=>[
   {:lift=>{
    :exercise_id=>"1", 
    :infos=>[
     {:weight=>"250", :repetiton=>"8"}, 
     {:weight=>"275", :repetition=>"6"}
            ]
           }
   },
   {:lift=>{
    :exercise_id=>"2", 
    :infos=>[
     {:weight=>"405", :repetition=>"12"}, 
     {:weight=>"445", :repetition=>"4"}
            ]
           }
   }
              ]
} 

在学习如何在rails中正确设置表单时,我意识到在开始构建表单之前决定我想要的params是非常有帮助的。我在表格的早期阶段就遇到了问题。

在上面的参考文献中,我们有一个有名字的例程。这个例程有许多升降机,这是常规和练习之间的联接。在选择字段中,我试图让用户从Exercise.all中选择一个练习,并将exercise的实例设置为exercise_id,以便与routine_id一起创建一个提升。每个升降机都会有很多组(上面显示的参数中的信息,导轨不允许我使用套装),这些重量有重量。

在我目前的简短形式中,我选择的最后一个练习是在参数中传递的唯一练习。我在猜测,因为在进行质量分配时,第一个:电梯被第二个电梯覆盖:电梯等等。这是我目前的表格

<%= form_tag routines_path %>

<%= label_tag "routine[name]", "Routine Name" %>
<%= text_field_tag "routine[name]" %><br />

<%= select("arbitrary[][lift]", "exercise_id", Exercise.all.collect {|p| [ p.name, p.id] }) %><br />

<%= select("arbitrary[][lift]", "exercise_id", Exercise.all.collect {|p| [ p.name, p.id] }) %>

<%= submit_tag "Submit Routine" %>

有没有办法可以完成这些参数,或者我是否会选择错误的参数。我猜测,如果每个人:电梯被称为不同的东西,可以工作,但不是我想要做的。感谢任何有帮助的人。

1 个答案:

答案 0 :(得分:0)

如果您知道要创建多少“任意”,可以使用循环创建它们......

<% 0...@maximum.each do |current_count|%>
  <%= select("arbitrary[][lift][#{current_count}][]", "exercise_id", Exercise.all.collect {|p| [ p.name, p.id] }) %><br />
<% end %>

每个都有一个唯一的编号,因此他们将创建可以迭代的单独的参数集。

您只需在渲染表单之前设置@maximum。