2010-10-27 2 views

risposta

80

La domanda è vecchia ma è il risultato migliore per "semplice selezione raggruppata" ricerca google in ogni caso quindi ho pensato che il prossimo lettore potrebbe trarre beneficio da alcuni modi creativi per creare questi ultimi con l'ultima semplice (tratti dai test, che sono sempre la migliore documentazione in effetti)

<%= f.input :author, 
:as => :grouped_select, 
:collection => [['Authors', ['Jose', 'Carlos']], ['General', ['Bob', 'John']]], 
:group_method => :last %> 

<%= f.input :author, 
:as => :grouped_select, 
:collection => Proc.new { [['Authors', ['Jose', 'Carlos']], ['General', ['Bob', 'John']]] }, 
:group_method => :last %> 

<%= f.input :author, 
:as => :grouped_select, 
:collection => { ['Jose', 'Carlos'] => 'Authors' }, 
:group_method => :first, 
:group_label_method => :last %> 

<%= f.input :author, 
:as => :grouped_select, 
:collection => { 'Authors' => ['Jose', 'Carlos'] }, 
:group_method => :last, 
:label_method => :upcase, 
:value_method => :downcase %> 
+0

Spot on. Grazie per aver fornito diverse soluzioni. Spero che accetti la tua risposta. – Eytan

+0

Suppongo che questo sia per simple_form 2.0+? Oppure funzionerebbe con la versione precedente di simple_form, come ho provato a utilizzare nel 2010. – Swartz

+1

Soldi in contanti! La prima soluzione ha funzionato perfettamente per me. Grazie mille! –

0

unico modo sano di mente che ho trovato per creare caselle di selezione raggruppati è quello di utilizzare il select aiutante passando un grouped_options_for_select che fa prendere un parametro selected_key per l'argomento scelte (in modo da poter garantire quella thats di impostare nel modello viene effettivamente selezionato). Vedrai la chiamata completa qui sotto. Scusa se è confusa.

-# @answer is the model instance passed into simple_form_for/form_for 
select(@answer.class.to_s.underscore, :question_id, option_groups_from_collection_for_select(@categories, 'questions.order(:display_order)', :name, :id, :question, @answer.question_id)) 

Se c'è un modo migliore per farlo che seleziona il valore corretto, anche io sono tutto orecchie.

tl; dr: se non si vede alcun modo con form_for o simple_form_for per creare selezioni raggruppate, quanto sopra dovrebbe aiutare almeno.

6

Se Hava due modelli che sono di categoria, sottocategoria come segue:

class Category < ActiveRecord::Base 
    has_many :products 
    has_many :subcategories 
end 

class Subcategory < ActiveRecord::Base 
    belongs_to :category 
    has_many :products 
end 

Quindi è possibile utilizzare

<%= simple_form_for [:admin, @yourmodel] do |f| %> 
    <%= f.input :subcategory_id, collection: Category.all, as: :grouped_select, group_method: :subcategories, prompt: "Select One" %> 
    <%= f.submit "Submit" %> 
<% end %> 

cui risultato come questo:

<div class="form-group grouped_select optional yourmodel_subcategory_id"> 
    <label class="grouped_select optional control-label" for="yourmodel_subcategory_id">Subcategory</label> 
    <select class="grouped_select optional form-control" id="yourmodel_subcategory_id" name="yourmodel[subcategory_id]"> 
    <option value="">Select One</option> 
    <optgroup label="Your 1st Category"> 
     <option value="This subcategory id">one subcategory belongs to Your 1st Category</option> 
    </optgroup> 
    <optgroup label="Your 2nd Category"> 
     <option value="This subcategory id">one subcategory belongs to Your 2nd Category</option> 
    </optgroup> 
    </select> 
</div> 

Spero che questo aiuti.

+0

Oh .. Bontà. Lei signore, sono una meraviglia. Ho appena passato l'ultima ora a raccogliere qualcosa per ottenere una matrice, di array, all'interno di array .. come per la risposta selezionata. Poi ho visto la tua spiegazione, e ho ripetuto lo stesso in 20 secondi. Grazie mille. L'ho fatto completamente all'indietro. – Tim