我有一个名为Product_Categories
:的表
:string :name
:string :icon
我在表格中有一个选择,我想显示产品类别的名称:
<%= builder.select :name, collection: @product_categories.each {|product_category| product_category.name} %>
其中@product_categories为:
@product_categories = Product_Category.all
它不显示名称,而是在选择下拉列表中显示整个对象。
如何迭代@product_categories以显示名称?
谢谢!
试试这个,你可以通过控制器动作id
在你的业务逻辑中使用它,name
将显示给用户
<%= builder.select :name, collection: @product_categories.collect {|p| [ p.name, p.id ] } %>
等效HTML
,类似于
<select name="product[id]">
<option value=""></option>
<option value="1">name1</option>
<option value="2">name2</option>
<option value="3">name3</option>
</select>
使用map
,
如果要显示name
并使用name
作为值
<%= builder.select :name, collection: @product_categories.map {|product_category| product_category.name} %>
如果要显示name
并使用id
作为值,请尝试此
<%= builder.select :name, collection: @product_categories.map {|product_category| [product_category.name, product_category.id]} %>
这样的东西应该更高效、更简单,不需要构建一个数组,然后在数组上使用#each
来构建选项,这可以直接在集合上执行每个
builder.collection_select :name, @product_categories, :id, :name