Rails中的复选框数组

时间:2013-11-26 10:34:45

标签: ruby-on-rails

有'FoodType'模型描述了餐馆的食物类型。我需要查看创建一个新餐厅,我需要有复选框列表,以便允许用户为每个餐厅设置食物类型。我想要这样的东西:

        <% FoodType.all.each do |food_type| %>
                    ...
            <div class="row">
                <%= f.check_box :food_types[0] %>       
            </div>
                    ...
        <% end %>

我想拥有像params[restaurant][food_types][0] = true这样的参数,以便在创建后进行一些操作。请告诉我,我该怎么做?提前致谢。

1 个答案:

答案 0 :(得分:0)

据推测,你有一个加入餐馆和食物类型的联接表?假设您有一个名为restaurant_food_types(型号为RestaurantFoodType),其中有restaurant_idfood_type_id

然后您将在餐馆中建立此关联:

Restaurant < ActiveRecord::Base
  has_many :restaurant_food_types
  has_many :food_types, :through => :restaurant_food_types

这将为您提供方法.food_type_ids,您可以在餐厅调用以设置连接。这是你应该在你的表单中挂钩的方法:它需要一个id数组,所以你需要设置一个数组样式的参数(名称以[]结尾的参数)你可能需要使用check_box_tag而不是.check_box ,访问数组样式的参数名称:我会这样做:

<% form_for @restaurant do |f| %>
  <% FoodType.all.each do |food_type| %>
    ...
    <div class="row">
      <%= check_box_tag "restaurant[food_type_ids][]", food_type.id, @restaurant.food_type_ids.include?(food_type.id) %><%= food_type.name %>    
    </div>
    ...
  <% end %>
  <%= f.submit "Save" %>
<% end %>

就像我说我在这里使用check_box_tag,但可能有更好的方式来挂钩food_type_ids方法。