Ich verwende simple_form gem für die Erstellung von Rails-Formularen. http://github.com/plataformatec/simple_form
Alles ist prima, nur wie erstelle ich ein gruppiertes Auswahlfeld? Ich kann es weder in den Dokumenten noch beim Googeln finden.
Ich verwende simple_form gem für die Erstellung von Rails-Formularen. http://github.com/plataformatec/simple_form
Alles ist prima, nur wie erstelle ich ein gruppiertes Auswahlfeld? Ich kann es weder in den Dokumenten noch beim Googeln finden.
Die Frage ist alt, aber es ist das Top-Ergebnis für "simple_form grouped select" Google-Suche sowieso, so dass ich dachte, der nächste Leser könnte von ein paar kreative Möglichkeiten, um diese mit dem neuesten simple_form (aus Tests, die immer die beste Dokumentation in der Tat sind) erstellen profitieren
<%= 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 %>
Genau richtig. Danke, dass Sie verschiedene Lösungen angeboten haben. Ich hoffe, er nimmt Ihre Antwort an.
Ich nehme an, dies ist für simple_form 2.0+? Oder würde dies mit älteren simple_form wie ich versucht, mit zurück im Jahr 2010 arbeiten.
Wenn Sie zwei Modelle haben, die einer Kategorie angehören, unterteilen Sie sie 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 %>
was zu folgendem Ergebnis führt:
<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>
Ich hoffe, das hilft.
Ach du meine Güte. Sie, Sir, sind ein Wunder. Ich habe gerade die letzte Stunde damit verbracht, etwas zusammenzubasteln, um ein Array von Arrays innerhalb von Arrays zu erhalten, wie in der ausgewählten Antwort. Dann sah ich Ihre Erklärung, und ich wiederholte das Gleiche in 20 Sekunden. Ich danke Ihnen vielmals. Ich hatte das völlig falsch verstanden.
Der einzige vernünftige Weg, den ich gefunden habe, um gruppierte Auswahlfelder zu erstellen, ist die Verwendung des Select-Helpers, der eine gruppierte_options_for_select die fait einen selected_key-Parameter für das choices-Argument (damit Sie sicherstellen können, dass der in Ihrem Modell festgelegte Schlüssel tatsächlich ausgewählt wird). Der vollständige Aufruf ist unten zu sehen. Tut mir leid, wenn es verwirrend ist.
-# @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 einen besseren Weg gibt, dies zu tun, der den richtigen Wert auswählt, bin ich ebenfalls ganz Ohr.
tl;dr: Nope nicht sehen, wie mit entweder form_for oder simple_form_for gruppierte Selects zu erstellen, sollte die oben genannten zumindest helfen.
Ich habe mir die Tests auch gerade angeschaut. Wenn Sie eine Prüfung bestehen wollen anderer Wert in das Optionstag einfügen, verwenden Sie Folgendes, um es an die Sammlung zu übergeben:
Agent = Struct.new(:id, :name)
agents = [["First", []], ["Second", [Agent.new(7, 'Bond'), Agent.new(47, 'Hitman')]]]
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Die gruppierte Auswahlbox wurde zu simple_form 2.0 hinzugefügt.