在保存表单之前处理check_box值

时间:2012-04-27 20:27:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 checkbox

我有一个包含4个属性:name, :characteristic1 ,:characteristic2,:characteristic3的模型Fruit。在水果表:characteristic1 ,:characteristic2,:characteristic3字段中将从6个复选框中接收值(因为我不想将所有6个字段添加到水果表中),其形式是用户必须只选择其中的3个。如何我获取复选框中选中的值并将其插入:characteristic1 ,:characteristic2,:characteristic3,而不是伪造:接受输入为text_field的名称字段?我确定这必须在控制器中完成但我不知道如何。谢谢你提前

形式

      <%= form_for @fruit ,:url=>{:action =>"create"} do |f| %>
      <%=f.text_field :name %>

      <%=f.fields_for :characteristics do |c| %>
        <!--Characteristics checkboxes -->
        <%end%>
       <%=f.submit "submit" %>

2 个答案:

答案 0 :(得分:1)

我会告诉你创建2个新模型:特色和FruitCharacteristic

水果具有许多特征,通过果实特征

阅读此api页面以找到解决表单问题的很酷的东西

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

<强>更新 这适用于多对多

<ul>
   <% Characteristic.all.each do |c| %>
      <li><%= check_box_tag :characteristics_ids, c.id, @fruit.characteristics.include?(c), :name => 'fruit[characteristics_ids][]' %>
      <%= label_tag :characteristics_ids, c.name %></li>
   <% end %>
</ul>

答案 1 :(得分:1)

由于您希望限制用户仅选择3个类别,因此最好在“characteristic1”,“characteristic2”和“characteristic3”之类的行中提供3个选择框/ 3组复选框。然后在控制器中,您可以使用params [:fruit] [:characteristic1]等来访问这些值。