Jak ustawić opcje HTML dla collection_select w Railsach?

83

Nie mogę znaleźć składni, aby dodać klasę do wybranego znacznika wygenerowanego przez Railsy collection_select. Trochę pomocy?

tybro0103
źródło
1
Czy możesz podać przykład, co chcesz zrobić? Nie rozumiem twojego pytania.
klew
Jasne ... Używam <% = f.collection_select ...%> railsów do generowania: <select ...> ... </select> Chcę tylko, żeby to było: <select class = "foo "...> ... </select>
tybro0103

Odpowiedzi:

181

Wielu pomocników Railsów przyjmuje wiele argumentów haszujących. Pierwsza to zazwyczaj opcje kontrolowania samego pomocnika, a druga to opcje html_options, w których określasz niestandardowe identyfikatory, klasy itp.

Definicja metody wygląda następująco:

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

Na liście parametrów zauważysz wielokrotność „= {}”. Aby tego użyć, pierwszy zestaw opcji, które określisz, musi być faktycznie ujęty w nawiasy:

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

Jeśli nie masz żadnych opcji do określenia poza klasą html, po prostu umieść pusty symbol zastępczy skrótu:

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

Dodatkowa dokumentacja API jest dostępna pod adresem : http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

Drew Blas
źródło
Ach, powinienem był przeczytać dokumentację trochę bliżej :)
tybro0103
1
Oto rozszerzenie tej odpowiedzi pokazujące, jak modyfikować styl .css i używać zdarzeń jQuery onchange<%= 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, dobra odpowiedź. Rozjaśniam wszystkie moje wątpliwości dotyczące collection_select.
Swapnil Chincholkar
Dość dokładna twoja odpowiedź. Wielkie dzięki.
Francisco Quintero
3
Dziękuję za jasne wyjaśnienie. Jest to jedna ze sztuczek Railsowych i słabo udokumentowana w RailsDocs.
lacostenycoder
9
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}
drjorgepolanco
źródło