Wie lege ich die HTML-Optionen für collection_select in Rails fest?

82

Ich kann anscheinend nicht die Syntax finden, um einem von Rails generierten Select-Tag eine Klasse hinzuzufügen collection_select. Etwas Hilfe?

tybro0103
quelle
1
Können Sie ein Beispiel geben, was Sie tun möchten? Ich verstehe deine Frage nicht.
Klew
Sicher ... Ich verwende Rails '<% = f.collection_select ...%>, um Folgendes zu generieren: <select ...> ... </ select> Ich möchte nur, dass es lautet: <select class = "foo "...> ... </ select>
tybro0103

Antworten:

180

Viele Rails-Helfer verwenden mehrere Hash-Argumente. Das erste sind normalerweise die Optionen zum Steuern des Hilfsprogramms selbst, und das zweite sind die html_options, in denen Sie benutzerdefinierte IDs, Klassen usw. angeben.

Die Methodendefinition sieht folgendermaßen aus:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Sie werden das Vielfache '= {}' in der Parameterliste bemerken. Um dies zu verwenden, muss der erste Satz von Optionen, den Sie angeben würden, tatsächlich in geschweiften Klammern stehen:

collection_select(:user, :title, UserTitle.all, :id, :name, {:prompt=>true}, {:class=>'my-custom-class'})

Wenn Sie außer der HTML-Klasse keine Optionen angeben können, fügen Sie einfach einen leeren Hash-Platzhalter ein:

collection_select(:user, :title, UserTitle.all, :id, :name, {}, {:class=>'my-custom-class'})

Zusätzliche API-Dokumentation finden Sie unter: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

Drew Blas
quelle
Ah, ich hätte die Dokumentation etwas genauer lesen sollen :)
tybro0103
1
Hier ist eine Erweiterung dieser Antwort, die zeigt, wie man den CSS-Stil ändert und jQuery onchange-Ereignisse verwendet<%= collection_select(:question , :text, Question.all , :id, :text, {:prompt => 'Select Question...'}, {:class=>'input', :name=>'normalSelect', :id=>'normalSelect', :style=>'width:50%', :onchange=>"$('#accordion').accordion('activate',2);$('#blind').show('blind', 500)"}) %>
wantrapreneur
Drew, nette Antwort. Alle meine Zweifel bezüglich collection_select klären.
Swapnil Chincholkar
Ganz genau deine Antwort. Vielen Dank.
Francisco Quintero
3
Vielen Dank für die klare Erklärung. Dies ist eine der Tricks von Rails und in RailsDocs schlecht dokumentiert.
Lacostenycoder
8
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}
drjorgepolanco
quelle