2016-07-31 44 views
0

对于我的形式,我有这样的:打印两个值(Rails的形式)

<%= 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

我认为如果您使用select而不是collection_select会更容易。试试看:

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

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 

所以,如果你得到的结果两次就意味着收集/阵列具有冗余的值。