2016-10-03 3 views
0

Ich versuche, die Länder meiner Produkte innerhalb eines select-Tages mitWie gebe ich verschiedene Werte mit options_from_collection_for_select helper zurück?

options_from_collection_for_select() 

Ich habe ein Produktmodell, mit Land als Spaltennamen zurückzukehren. Mein Code wie dies

<%= select_tag(:country, options_from_collection_for_select(Product.all.order(:country), :id, :country), :prompt => "Alle Länder") %> 

sieht aber es mir jedes Land mehr gibt als einmal in dem Drop-Down-Feld das heißt jedes Land erscheint 20-mal.

Jetzt versucht, ich habe eine Lösung in einer ähnlichen Frage vorgeschlagen zu verwenden, wie so

options_from_collection_for_select(Product.all.pluck('DISTINCT country'), :id, :country), :prompt => "Alle Länder") %> 

aber ich erhalte eine Fehlermeldung besagt:

"undefined method `country' for "Spain":String 
Did you mean? count" 

Jetzt kann ich nicht herausfinden, welche Methode ist in diesem Fall angebracht.

Vielen Dank!

+0

Sie bereits Strings erhalten, wenn Sie 'verwenden pluck'. Ich nehme auch an, dass diese Abfrage Ihnen IDs von Produkten geben würde, nicht Länder. Vielleicht sollte Ihr Modell eine country_id anstelle eines Ländernamens haben? Sie können versuchen, 'select_tag (: country, Product.all.pluck ('DISTINCT land'))' –

Antwort

1

Sie erhalten nicht-uniq-Werte, da es mehr als eine Zeile in db mit gegebenem Land gibt.

= f.select :country, 
    Product.pluck(:country).uniq, 
    { include_blank: 'Select country' } 

Wenn Sie noch wollen select_tag verwenden:

= select_tag :country, 
    options_for_select(Product.pluck(:country).uniq), 
    { include_blank: 'Select country' } 
+0

Ich nahm an, dass Sie 'Country' Modell haben, weil Ihre ausgewählten Felder' country_id' genannt werden. –

+0

Dies könnte möglicherweise langsam sein, weil Sie ' Er holt alle Datensätze aus der Datenbank und behandelt dann die Deduplizierung mit Ruby. Ich denke, das OP möchte das auf der DB-Ebene handhaben (und zwar zu Recht). –

+0

danke für die Antwort, aber ich habe keine Länder Tabelle :(ist es möglich, nur mit einem Land Tabelle? – AaronDT

Verwandte Themen