如何在集合中显示资源名称列表(表单中的select)



我有一个名为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

最新更新