Frage

Ich verwende simple_form Juwel für Rails Erstellen von Formularen. http://github.com/plataformatec/simple_form

Alles ist großartig, mit der Ausnahme, wie erstelle ich eine gruppierte Auswahlbox? Kann es nicht in der Dokumentation oder von Google-ing finden.

War es hilfreich?

Lösung

Die Frage ist alt, aber es ist das Top-Ergebnis für „simple_form gruppierte wählen“ google sowieso suchen, damit ich die nächsten Leser könnte profitieren von einem paar kreativen Möglichkeiten rechnete diese mit dem neuesten simple_form (von Tests genommen zu schaffen, die immer der beste Dokumentation in der Tat)

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

Andere Tipps

Wenn Sie zwei Modelle hava die Kategorie, Unterkategorie wie folgt:

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

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

Dann können Sie

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

, die wie folgt ergeben:

<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, das hilft.

Nur vernünftige Weise, die ich gefunden habe, gruppierten Auswahlbox erstellen, ist die Auswahl Helfer in einem a href vorbei zu verwenden <= "http://apidock.com/rails/v3.0.0/ActionView/Helpers/FormOptionsHelper/option_groups_from_collection_for_select "rel =" nofollow "> grouped_options_for_select die em <> funktioniert nimm einen selected_key Parameter für die Auswahl Argument (so dass Sie die eine, das sind festgelegt in Ihrem Modell wird sicherstellen können, tatsächlich ausgewählt). Sie werden den vollständigen Aufruf unten. Sorry, wenn seine verwirrend.

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

Wenn es ein besserer Weg, dies zu tun, dass wählt der richtige Wert, ich bin ganz Ohr auch.

tl; dr:. Nö keine Möglichkeit, mit entweder sehen form_for oder simple_form_for gruppierte wählt zu schaffen, sollten die oben zumindest helfen,

Ich hatte nur einen Blick in die auch Tests. Wenn Sie eine anderen Wert auf die Option-Tag übergeben möchten, verwenden Sie die folgende es um die Sammlung zu übergeben:

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

finden Sie unter https://github.com/plataformatec/ simple_form / Blob / Master / test / Ein- / grouped_collection_select_input_test.rb

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top