2016-11-08 3 views
1

Я запутался в настройке имени формы и ее параметров.Rails number_field_tag ​​pass hash value

Вот моя форма

<%= form_tag('/monster) do %> 
    <% @monsters.each do |monster| %> 
    <tr> 
     <th scope="row"><%= monster.id %></th> 
     <td><%= t("backpack.mon_infos.#{monster.name}.name") %></td>     
     <td><%= number_field_tag "monster[[#{monster.id},#{monster.name}]]", 0 %></td> 
    </tr> 
    <% end %> 
<% end %> 

В PARAMS получит этот

"monster" => { 
    "1,MonsterA" => "10", 
    "2,MonsterB" => "25" 
} 

Но я хочу, чтобы это было как

"monster" => { 
    "1" => {'name': 'MonsterA' ,'quanty': "10"}, 
    "2" => {'name': 'MonsterB' ,'quanty': "25"} 
} 

ответ

1

Вы можете попробовать это:

<%= form_tag('/monster) do %> 
    <% @monsters.each do |monster| %> 
    <tr> 
     <th scope="row"><%= monster.id %></th> 
     <td><%= t("backpack.mon_infos.#{monster.name}.name") %></td>     
     <%= hidden_field_tag "monster[#{monster.id}][name]", monster.name %> 
     <td><%= number_field_tag "monster[#{monster.id}][quantity]", 0 %></td> 
    </tr> 
    <% end %> 
<% end %> 
2

разбивают значения id и name в их собственные [id][name]. Чтобы получить хэш второго уровня, создайте второй ключ и сопоставьте его со значением.

<% @monsters.each do |monster| %> 
    <tr> 
    <th scope="row"><%= monster.id %></th> 
    <td><%= t("backpack.mon_infos.#{monster.name}.name") %></td> 
    <td><%= number_field_tag "monster[#{monster.id}]['name']", monster.name %></td> 
    <td><%= number_field_tag "monster[#{monster.id}]['quanty']", monster.quanty %></td> 
</tr> 
<% end %> 
+0

Это близко, но он стал ' "монстр"=> { "1"=> ​​{ "Монстера"=> "10"}, "2" => {"MonsterB" => "25"} '. –

+0

Обновлено мое, но понял, что вы, вероятно, не хотите показывать часть значения. Это может означать, что вы хотите пойти с ответом @JagdeepSingh. –

+0

Да, но все равно спасибо за вашу помощь –