如果是为模型生成的,如何在表单中添加选择字段?
我的控制器发送应该用于填充选择的数组。
控制器:
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
数组填充的选择的地方。
答案 0 :(得分:2)
= f.select :category_id, @categories.collect {|c| [ c.name, c.id ]}
其中@categories
为Category.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样式,类等,属性)。