ruby-on-rails - 在 collection_select ( Rails 表单) 中,ruby 打印两个值

  显示原文与译文双语对照的内容
134 5

对于我的表单,我有:

<%= tag_field.collection_select( :id, Material.order(:name), :id, :name,
 :prompt =>"-select-")%>

打印我的材质名称。例如:

Cat 
Cat

但是,这是没有帮助的,因为材质具有相同的名称。在材质记录中还有另一个属性:颜色。

我想把它打印出来。

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"]

它打印出两次同样的值。我想我靠近了请帮助。

时间:原作者:0个回答

89 5

我认为你用 select 代替 collection_select 更容易。尝试一下:

<%= tag_field.select :id, Material.order(:name).map{ |m| ["#{m.name} - #{m. color}", m.id ] }, {prompt:"-select-"} %>
原作者:
147 2

这个答案很清楚地解释了 collection_select helper的用法。方法 :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

所以如果你得到两次结果,这意味着集合/array 有冗余值。

原作者:
...