simple_form を使用してグループ化された選択ボックスを作成するにはどうすればよいですか?
-
26-09-2019 - |
質問
Rails フォームの作成には simple_form gem を使用しています。http://github.com/plataformatec/simple_form
グループ化された選択ボックスを作成する方法を除けば、すべてがうまくいきました。ドキュメントでもグーグルでも見つかりません。
解決
問題は古いですが、私は次のリーダーは常にテストから取られた最新のsimple_form(、でこれらを作成するには、いくつかの創造的な方法の恩恵を受けるかもしれない考え出したのでグーグルとにかく検索「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 %>
他のヒント
次のように分類されている二つのモデル、サブカテゴリをHAVA場合:
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>
希望このことができます。
グループ化された選択ボックスを作成する唯一の賢明な方法は、選択ヘルパーを使用して grouped_options_for_select どれの する 選択引数として selected_key パラメーターを取得します (これにより、モデルに設定されているものが実際に選択されることを確認できます)。以下に呼び出し全体を示します。混乱していたらごめんなさい。
-# @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))
適切な値を選択してこれを行うより良い方法があれば、私も大歓迎です。
先生: いいえ、form_for または simple_form_for を使用してグループ化された選択を作成する方法が見つかりません。少なくとも上記は役立つはずです。
私もテストについて調べてみました。を渡したい場合は、 異なる値 オプション タグに追加するには、次のコードを使用してコレクションに渡します。
Agent = Struct.new(:id, :name)
agents = [["First", []], ["Second", [Agent.new(7, 'Bond'), Agent.new(47, 'Hitman')]]]
所属していません StackOverflow