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这样的参数,以便在创建后进行一些操作。请告诉我,我该怎么做?提前谢谢。

假设您有一个连接餐厅和食物类型的连接表?假设您有一个名为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方法中。

最新更新