Come creare una casella di selezione raggruppati utilizzando simple_form?
-
26-09-2019 - |
Domanda
sto usando simple_form gioiello per la creazione di forme Rails. http://github.com/plataformatec/simple_form
Tutto è grande, tranne che come faccio a creare una casella di selezione raggruppato? non riesce a trovare nella documentazione o di google-ing.
Soluzione
Il problema è vecchio, ma è il risultato superiore per "simple_form raggruppati selezionare" Cerca con Google in ogni caso così ho pensato che il beneficio successivo lettore potrebbe da alcuni modi creativi per creare questi con l'ultima simple_form (tratto da test, che sono sempre il migliore documentazione anzi)
<%= 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 %>
Altri suggerimenti
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 %>
che risultano in questo modo:
<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.
L'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 em <> ha prendere un parametro selected_key per l'argomento scelte (in modo da poter garantire i uno i thats stabiliti nel modello viene effettivamente selezionati). Vedrete la piena chiamata di seguito. Scusate se la sua confusione.
-# @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 fare questo che seleziona il valore appropriato, sono tutto orecchie pure.
tl; dr:. no non vedendo alcun modo sia con form_for o simple_form_for per creare seleziona raggruppate, quanto sopra dovrebbe aiutare almeno
Ho appena avuto uno sguardo nei test pure. Se si desidera passare un valore diverso per il tag opzione, utilizzare il seguente per passare alla raccolta:
Agent = Struct.new(:id, :name)
agents = [["First", []], ["Second", [Agent.new(7, 'Bond'), Agent.new(47, 'Hitman')]]]