0

我正在尝试将以下参数转换为 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 中正确设置表单后,我意识到在开始构建表单之前决定我希望我的参数是什么是非常有帮助的。我在表单的早期阶段遇到了问题。

在上面的参数中,我们有一个有名字的例程。该例程有许多升降机,这是例程和锻炼之间的连接。在一个选择字段中,我试图让用户从Exercise.all 中选择一个锻炼并将锻炼实例设置为executive_id,以便与routine_id 一起创建升降机。每个升降机将有很多组(上面显示的参数中的信息,rails 不会让我使用 set),它们有重量和重复。

在我目前拥有的简短形式中,我选择的最后一个练习是参数中唯一传递的练习。我猜是因为在进行质量分配时,第一个 :lift 会被第二个 :lift 覆盖,依此类推。这是我目前拥有的表格

<%= 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 被称为不同的东西,它会起作用,但不是我想要做的。感谢任何可以提供帮助的人。

4

1 回答 1

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。

于 2013-07-28T23:12:18.390 回答