有'FoodType'模型描述了餐馆的食物类型。我需要查看创建一个新餐厅,我需要有复选框列表,以便允许用户为每个餐厅设置食物类型。我想要这样的东西:
<% FoodType.all.each do |food_type| %>
...
<div class="row">
<%= f.check_box :food_types[0] %>
</div>
...
<% end %>
我想拥有像params[restaurant][food_types][0] = true
这样的参数,以便在创建后进行一些操作。请告诉我,我该怎么做?提前致谢。
答案 0 :(得分:0)
据推测,你有一个加入餐馆和食物类型的联接表?假设您有一个名为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方法。