Question

J'utilise gem simple_form pour créer des formulaires Rails. http://github.com/plataformatec/simple_form

Tout est très bien, sauf comment puis-je créer une boîte de sélection groupée? Impossible de trouver dans la documentation ou par google-ing.

Était-ce utile?

La solution

La question est vieux, mais il est le résultat supérieur pour « simple_form Groupés sélectionnez » google recherche de toute façon, donc je pensais que le prochain lecteur pourrait bénéficier de quelques façons créatives de créer avec la dernière simple_form (tiré de tests, qui sont toujours les meilleure documentation en effet)

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

Autres conseils

Si vous Hava deux modèles qui appartiennent à la catégorie, la sous-catégorie comme suit:

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

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

Ensuite, vous pouvez utiliser

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

qui résultent comme ceci:

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

Hope this helps.

La seule façon saine d'esprit que j'ai trouvé pour créer regroupés boîtes de sélection est d'utiliser l'assistant de sélection qui passe dans un grouped_options_for_select qui fait prendre un paramètre selected_key pour l'argument de choix (afin de vous assurer les thats définis dans votre modèle obtient effectivement choisi). Vous verrez l'appel complet ci-dessous. Désolé si sa confusion.

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

S'il y a une meilleure façon de le faire qui choisit la bonne valeur, je suis tout ouïe aussi bien.

tl; dr. Nope ne voyant aucune façon soit form_for ou simple_form_for pour créer groupées sélectionne, ce qui précède devrait aider au moins

Je viens d'avoir un regard sur les essais aussi bien. Si vous voulez passer une valeur différente pour la balise option, utilisez ce qui suit pour passer à la collection:

Agent = Struct.new(:id, :name)
agents = [["First", []], ["Second", [Agent.new(7, 'Bond'), Agent.new(47, 'Hitman')]]]

voir https://github.com/plataformatec/ simple_form / blob / maître / test / entrées / grouped_collection_select_input_test.rb

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top