Rails フォームの作成には simple_form gem を使用しています。 http://github.com/plataformatec/simple_form
グループ化された選択ボックスを作成する方法を除いて、すべて素晴らしいです。ドキュメントやグーグルで見つけられません。
Rails フォームの作成には simple_form gem を使用しています。 http://github.com/plataformatec/simple_form
グループ化された選択ボックスを作成する方法を除いて、すべて素晴らしいです。ドキュメントやグーグルで見つけられません。
質問は古いですが、とにかく「simple_form grouped select」Google検索のトップの結果なので、次の読者は、最新のsimple_formを使用してこれらを作成するいくつかの創造的な方法から恩恵を受ける可能性があると考えました(テストから取得され、常に最高のドキュメントです) )
<%= 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 %>
カテゴリである 2 つのモデルがある場合、サブカテゴリは次のようになります。
class Category < ActiveRecord::Base
has_many :products
has_many :subcategories
end
class Subcategory < ActiveRecord::Base
belongs_to :category
has_many :products
end
次に、使用できます
<%= 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 %>
結果は次のようになります。
<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>
お役に立てれば。
ついでにテストも見てみました。別の値をオプション タグに渡したい場合は、次を使用してコレクションに渡します。
Agent = Struct.new(:id, :name)
agents = [["First", []], ["Second", [Agent.new(7, 'Bond'), Agent.new(47, 'Hitman')]]]
https://github.com/plataformatec/simple_form/blob/master/test/inputs/grouped_collection_select_input_test.rbを参照してください
グループ化された選択ボックスを作成するために私が見つけた唯一の正しい方法は、choices 引数に selected_key パラメーターを取る grouped_options_for_select を渡す選択ヘルパーを使用することです(モデルに設定されているものが実際に選択されるようにすることができます)。以下に完全な呼び出しが表示されます。紛らわしい場合は申し訳ありません。
-# @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))
適切な値を選択するより良い方法があれば、私も耳を傾けます。
tl;dr:いいえ、form_for または simple_form_for を使用してグループ化された選択を作成する方法が表示されない場合、上記は少なくとも役立つはずです。