5

È possibile utilizzare in qualche modo l'opzione: selezionata che si userebbe su un normale assistente di selezione della vista con la funzione grouped_collection_select? Mi piacerebbe impostare il valore che viene preselezionato nella mia lista. Ho provato a passare: selezionato come opzione senza fortuna!Come utilizzare: selezionato con grouped_collection_select

Ecco alcune snippts codice di mie prove:

grouped_collection_select 'user[subscription_attributes]', :subscription_plan_id, Trade.order(:name).all, :subscription_plans, :name, :id, :display_name, { :include_blank => true, :selected => 5 } 

grouped_collection_select 'user[subscription_attributes]', :subscription_plan_id, Trade.order(:name).all, :subscription_plans, :name, :id, :display_name, :include_blank => true, :selected => 5 

Né versione funziona. Nessun selezionato è impostato. Lo sto usando per impostare un valore per un modello annidato. Sto usando i metodi di selezione dinamica dei railscast: http://railscasts.com/episodes/88-dynamic-select-menus-revised

Non ho potuto ottenere formtastic per giocare bene con il gruppo seleziona quindi ho dovuto farlo a mano ma non mantenere questo valore selezionato quando un utente non riesce convalide. Mi piacerebbe mantenere questo set quando correggono errori di validazione.

+0

sembra essere un bug/caratteristica non ancora aggiunto a Rails per grouped_collection_select. Apparentemente c'è una soluzione per questo solo sul ramo principale. Penso che l'unica opzione sarebbe usare Javascript. – Noz

+0

#barancw Hai mai immaginato come preselezionare per un grouped_collection_select? Reddirt – Reddirt

risposta

9

Ho appena incontrato lo stesso problema e l'ho risolto utilizzando lo option_groups_from_collection_for_select helper e l'helper select documentato a: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html.

Il primo passo è creare le opzioni raggruppate. Prendendo il vostro esempio, dovrebbe assomigliare:

<% options = option_groups_from_collection_for_select(Trade.order(:name).all, 
    :subscription_plans, :name, :id, :display_name, 5) %> 

Poi ho creato l'oggetto di selezione come:

<%= select('user[subscription_attributes]', :subscription_plan_id, options, 
    include_blank: true) %> 

si può scrivere tutto in una sola riga, ho appena rotto le opzioni in una separata variabile per illustrare i due diversi metodi.

1

Forse troppo tardi, ma la documentazione API degli stati grouped_collection_select: 'Il valore restituito dal metodo di chiamata sull'oggetto di istanza verrà selezionato.'

Quindi, non è nemmeno necessario specificare: opzione selezionata, poiché Rails selezionerà automaticamente in base al valore corrente dell'attributo. Se subscription_plan_id ha valore 5, allora è quello che verrà selezionato.

Se questo dovrebbe essere un valore predefinito, è possibile impostarlo con un after_initialize nel modello.

0

In realtà è necessario inviare in opzioni include_blank per esempio

<%= grouped_collection_select :id, model.all, options = {:include_blank => 'Selecione'}%> 
Problemi correlati