2016-07-31 12 views
0

Für meine Form, ich habe dies:Druck zwei Werte in collection_select (Rails Forms)

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

Dies druckt meine Materialien Namen. Beispiel:

Cat 
Cat 

Dies ist jedoch nicht hilfreich, da die Materialien, die die gleichen Namen haben. Es gibt ein weiteres Attribut im Material-Datensatz: Farbe.

Ich will es dieses

in der Dropdown-Liste auszudrucken
Cat - Brown 
Cat - Orange 

Wie gehe ich um dies zu tun? Ich habe versucht, stattdessen eine Methode aufzurufen, aber sie druckt nicht so, wie ich es möchte. Hier ist was ich getan habe.

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 

jedoch die Drop-Down-druckt wie folgt aus:

["Cat - Brown", "Cat - Orange"] 
["Cat - Brown", "Cat - Orange"] 

Er druckt zweimal aus, mit den gleichen Werten. Ich denke ich bin nah dran? Bitte helfen Sie.

Antwort

0

Ich denke, es ist einfacher, wenn Sie select anstelle von collection_select verwenden. Versuchen Sie es:

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

This answer eindeutig die Verwendung von collection_select Helfer erklärt. Das Verfahren :name_with_initial (das das Verfahren something im Code entspricht) wird erklärt, wie:

: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 

Also, wenn Sie Ergebnisse bekommen zweimal bedeutet es, die Sammlung/Array redundante Werte aufweist.

Verwandte Themen