Ruby on rails 具有多个相同键名的嵌套表单
我正在尝试将以下参数转换为Rails表单Ruby on rails 具有多个相同键名的嵌套表单,ruby-on-rails,ruby,nested-forms,Ruby On Rails,Ruby,Nested Forms,我正在尝试将以下参数转换为Rails表单 {:routine=>{ :name=>"Test"}, :arbitrary=>[ {:lift=>{ :exercise_id=>"1", :infos=>[ {:weight=>"250", :repetiton=>"8"}, {:weight=>"275", :repetition=>"6"} ]
{: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中正确设置表单之后,我意识到在开始构建表单之前决定我希望参数是什么非常有帮助。我在身体的早期阶段遇到了一个问题
在上面的参数中,我们有一个具有名称的例程。那套套路有很多升降机,是套路和练习之间的连接。在“选择”字段中,我试图让用户从exercise.all中选择一个练习,并将exercise的实例设置为exercise\u id,以便与例程\u id一起创建提升。每部电梯都将有许多装置(如上图所示参数中的信息,rails不允许我使用该装置),这些装置具有重量和重复次数
在我目前拥有的简短形式中,我选择的最后一个练习是在参数中传递的唯一练习。我猜是因为在指定质量时,第一个:提升被第二个:提升覆盖,依此类推。这是我目前的表格
<%= 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" %>
是否有一种方法可以实现这些参数,或者我通常选择了错误的参数。我猜,如果每一个:lift都被称为不同的东西,它会起作用,但不是我想做的。感谢所有能提供帮助的人。如果您知道要创建多少个“任意”,可以使用循环创建它们
<% 0...@maximum.each do |current_count|%>
<%= select("arbitrary[][lift][#{current_count}][]", "exercise_id", Exercise.all.collect {|p| [ p.name, p.id] }) %><br />
<% end %>
每个参数都有一个唯一的编号,因此它们将创建可以迭代的单独参数集
在呈现表单之前,您只需设置@maximum。如何设置“任意[][lift][1][]”和“任意[][lift][2][]”?当我给出表单“任意[][lift[1]”和[2]时对于下一个领域,它是有效的。问题是,我希望用户动态添加他们选择的不同练习,这将使这种硬编码更具挑战性,但这是一个很好的起点。是否有一种方法可以动态更改此处的数字[][lift][1][]?那么,每次用户通过Ajax说“另一个任意的,请?”时,您都要添加一个分部吗?然后您可以使用会话变量来构建它。您可以使用类似于……的功能,然后只需在循环中使用| k,v |就可以了