在 collection_select 中打印两个值(Rails 表格)
print two values in collection_select (Rails Forms)
对于我的表格,我有这个:
<%= tag_field.collection_select( :id, Material.order(:name), :id, :name,
:prompt => "-select-")%>
这会打印我的材料名称。
示例:
Cat
Cat
但是,这没有帮助,因为这些材料具有相同的名称。
Material 记录中还有一个属性,:color.
我希望它在下拉列表中打印出来
Cat - Brown
Cat - Orange
我该怎么做?我试着调用一个方法,但它没有按照我想要的方式打印出来。这是我所做的。
View:
<%= tag_field.collection_select( :id, Material.order(:name), :id, :something,
:prompt => "-select-")%>
Model:
def something
materials_array = []
Material.all.each do |material|
if material.color == nil
material.name + '-' + material.size
else
materials_array.push(material.name + '-' + material.color)
end
end
materials_array
end
但是,下拉列表打印如下:
["Cat - Brown", "Cat - Orange"]
["Cat - Brown", "Cat - Orange"]
它打印了两次,具有相同的值。我想我很接近?请帮忙。
我认为如果使用 select
而不是 collection_select
会更容易。试一试:
<%= tag_field.select :id, Material.order(:name).map{ |m| [ "#{m.name} - #{m. color}", m.id ] }, {prompt: "-select-"} %>
This answer 清楚地解释了 collection_select 助手的用法。方法:name_with_initial
(对应代码中的方法something
)解释为:
:name_with_initial, # this is name of method that will be called for
# every row, result will be set as value
# as a result, every option will be generated by the following rule:
# <option value=#{author.id}>#{author.name_with_initial}</option>
# 'author' is an element in the collection or array
因此,如果您得到两次结果,则表示 collection/array 具有冗余值。
对于我的表格,我有这个:
<%= tag_field.collection_select( :id, Material.order(:name), :id, :name,
:prompt => "-select-")%>
这会打印我的材料名称。 示例:
Cat
Cat
但是,这没有帮助,因为这些材料具有相同的名称。 Material 记录中还有一个属性,:color.
我希望它在下拉列表中打印出来
Cat - Brown
Cat - Orange
我该怎么做?我试着调用一个方法,但它没有按照我想要的方式打印出来。这是我所做的。
View:
<%= tag_field.collection_select( :id, Material.order(:name), :id, :something,
:prompt => "-select-")%>
Model:
def something
materials_array = []
Material.all.each do |material|
if material.color == nil
material.name + '-' + material.size
else
materials_array.push(material.name + '-' + material.color)
end
end
materials_array
end
但是,下拉列表打印如下:
["Cat - Brown", "Cat - Orange"]
["Cat - Brown", "Cat - Orange"]
它打印了两次,具有相同的值。我想我很接近?请帮忙。
我认为如果使用 select
而不是 collection_select
会更容易。试一试:
<%= tag_field.select :id, Material.order(:name).map{ |m| [ "#{m.name} - #{m. color}", m.id ] }, {prompt: "-select-"} %>
This answer 清楚地解释了 collection_select 助手的用法。方法:name_with_initial
(对应代码中的方法something
)解释为:
:name_with_initial, # this is name of method that will be called for # every row, result will be set as value # as a result, every option will be generated by the following rule: # <option value=#{author.id}>#{author.name_with_initial}</option> # 'author' is an element in the collection or array
因此,如果您得到两次结果,则表示 collection/array 具有冗余值。