如何在生成的表单中添加选择(下拉列表)?

时间:2013-12-11 14:10:46

标签: ruby-on-rails ruby

如果是为模型生成的,如何在表单中添加选择字段?

我的控制器发送应该用于填充选择的数组。

控制器:

def new
  @categories= Category.all
  @product= Product.new
end

“类别”模型具有ID和标签。

表格如下:

=form_for :product do |f|
- if @product.errors.any?
#error_explanation
  %h2
    = pluralize(@product.errors.count, "error")
    prohibited
    this product from being saved:
  %ul
    - @product.errors.full_messages.each do |msg|
      %li= msg
%p
  = f.label :title
  %br
  = f.text_field :title
%p
 = f.label :category_id
 %br
 = f.xxxxxxxxx
%p
  = f.submit

xxxxxxxxx是我需要@categories数组填充的选择的地方。

2 个答案:

答案 0 :(得分:2)

= f.select :category_id, @categories.collect {|c| [ c.name, c.id ]}

其中@categoriesCategory.all

答案 1 :(得分:1)

我出于两个原因避免@NARKOZ建议。最重要的是它将应该在控制器中的逻辑(获取类别记录)嵌入到视图中。这是糟糕的分离。其次,有一种非常方便的collection_select方法可以完成同样的事情。

= f.collection_select :category_id, @categories, :id, :name, {prompt: 'Pick a category'}, { class: 'select-this' }

这假设您已在控制器中加载@categories实例变量,就像您在问题中一样。

请注意,此方法最后需要两个可选的哈希值。第一个哈希接受select方法的常用选项。第二个哈希接受HTML选项(例如,HTML样式,类等,属性)。