2010-10-27 10 views

Respuesta

80

La pregunta es antigua pero es el resultado principal de la búsqueda en google "simple_form grouped select", así que pensé que el siguiente lector podría beneficiarse de algunas formas creativas de crear estos con la última simple_form (tomada de pruebas, que siempre la mejor documentación de hecho)

<%= 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. Gracias por proporcionar varias soluciones diferentes. Espero que él acepte tu respuesta. – Eytan

+0

Supongo que esto es para simple_form 2.0+? O podría funcionar con old_form antiguo, como traté de usar en el año 2010. – Swartz

+1

Dinero en efectivo! La primera solución funcionó perfectamente para mí. ¡Muchas gracias! –

0

única manera sensata que he encontrado para crear cajas de selección agrupados es utilizar el ayudante de selección que pasa en un grouped_options_for_select, que hace tomar un parámetro selected_key para el argumento opciones (para que pueda garantizar el thats uno que encuentra en su modelo en realidad es seleccionado). Verás la llamada completa a continuación. Lo siento si es confuso.

-# @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)) 

Si hay una mejor manera de hacer esto que selecciona el valor adecuado, soy todo oídos también.

tl; dr: no veo de ninguna manera con form_for o simple_form_for para crear selecciones agrupadas, lo anterior debería ayudar al menos.

6

Si hava dos modelos que son categoría, subcategoría de la siguiente manera:

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

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

continuación, puede utilizar

<%= 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 %> 

que resultan de esta manera:

<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> 

Espero que esto ayude.

+0

Oh ... Dios. Usted señor, es una maravilla. Acabo de pasar la última hora mezclando algo para obtener una matriz, de matrices, dentro de matrices ... según la respuesta seleccionada. Luego vi tu explicación y repetí lo mismo en 20 segundos. Muchas gracias. Tenía esto completamente al revés. – Tim

Cuestiones relacionadas