如何在rails 3中创建check_box_tag

时间:2014-06-19 16:39:27

标签: ruby-on-rails checkbox

我有模型restaurantlunch。餐厅has_many :lunches和午餐belongs_to :restaurant。有了这些关系,我想把所有可用的餐馆都显示为复选框。

lunch.rb看起来像这样:

  attr_accessible :date, :email, :name, :restaurant_id
  belongs_to :restaurant

但我发现很难做到。有人能解释check_box_tag中所有的参数吗?

我收到了一段代码并进行了相应的修改,但它不起作用。

<div class="form_row">
    <label for="restaurant_id[]">Restaurants:</label>
    <% for restaurant in Restaurant.find(:all) do %>
      <br><%= check_box_tag 'restaurant_id[]', restaurant.id %>
      <%= restaurant.name.humanize %>
    <% end %>
</div>

但是当我看到日志restaurant_id为零时。

2 个答案:

答案 0 :(得分:0)

您可以在此处获得相关的表单助手文档:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box

<%= check_box_tag(:restaurant, restaurant.id) %>

输出:

<input id="restaurant" name="restaurant" type="checkbox" value=restaurant.id />

check_box_tag的第一个参数当然是输入的名称。第二个参数当然是输入的值。选中复选框后,此值将包含在表单数据中(并存在于参数中)。

http://guides.rubyonrails.org/form_helpers.html

源代码:

http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box

# File actionpack/lib/action_view/helpers/form_helper.rb, line 929
      def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
        Tags::CheckBox.new(object_name, method, self, checked_value, unchecked_value, options).render
      end

答案 1 :(得分:0)

如果您有此关联,则无法使用复选框标记:

  • restaurant has_many:lunches
  • 午餐belongs_to:restaurant

您应该在午餐表格上使用选择标签(singel select)或单选按钮标签,因为午餐只有一家餐厅。

使用select:

的示例
<%= f.label :restaurant_id, 'Restaurant Name' %>
<%= f.collection_select(:restaurant_id, Restaurant.all, :id, :name, :prompt => 'Please select restaurant') %>