5 Stimmen

Geländer: Vorauswahl eines Wertes im ActionView-Helper 'collection_select'

Ich versuche, die ActionView-Helfer collection_select um einen Wert zu übernehmen, der im Dropdown-Menü vorausgewählt wird.

Weder noch ( :selected im html-option-hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>

noch ( :selected im Option-Hash)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>

scheinen zu funktionieren.

Was mache ich falsch? Kann mir jemand dabei helfen?

8voto

John Topley Punkte 110122

De la docs :

Beispielverwendung (Auswahl der zugehörigen Author für eine Instanz von Post , @post ):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

Si @post.author_id bereits 1 ist, würde dies zurückgegeben:

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

Sie müssen also nur sicherstellen, dass @my_object.my_method gibt einen Wert zurück, der mit einem der verfügbaren Optionswerte übereinstimmt. Wenn es eine Übereinstimmung gibt, wird diese Option ausgewählt.

2voto

Daniel Vandersluis Punkte 87406

Nach Angaben der docs wenn @my_object.my_method denselben Wert wie eine der Optionen hat, wird diese standardmäßig ausgewählt.

Umgekehrt können Sie versuchen, mit options_from_collection_for_select in Verbindung mit select_tag :

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>

2voto

Jakub Czaplicki Punkte 1649

Utilisez :selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>

0voto

alex.zherdev Punkte 23460

Prüfen Sie, ob @my_object.my_method den Wert Null liefert. Wenn ja,

Wenn die aufrufende Methode nil zurückgibt, wird keine Auswahl getroffen, ohne :prompt oder :include_blank in den Optionshash aufzunehmen.

Andernfalls können Sie versuchen, Lambda zu verwenden, wie im rdoc-Beispiel

{:disabled => lambda {|category| category.archived? }

In Ihrem Fall sieht das wie folgt aus

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}

-1voto

Avishai Punkte 4290

Es funktioniert auch, wenn Ihre Sammlung in Form eines Arrays von 2-Wert-Arrays vorliegt:

CURRENCIES = [["USD", "$"], ["BRL", "R$"]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

El :first y :last Trick funktioniert ganz gut für diese Dinge, ohne dass ein separates Modell für sie definiert werden muss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X