有一个"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_id
和food_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方法中。