Создание optgroup Использование жемчуга simple_form в Rails 3.2
Кажется, что только небольшая документация по функции grouped_select в simple_form 2.0 на http://simple-form.plataformatec.com.br/#usage/collections. В документации есть строка:
f.input :country_id, :collection => @continents, :as => :grouped_select, :group_method => :countries
Но это, похоже, не дает мне достаточно контекста, чтобы заставить его работать. Вот что у меня есть.
У меня есть три модели: запрос, объявление и вставки
Объявления has_many Вставки и Вставки принадлежит_обучению
Запрос принадлежит_в Вставка и Вставки has_many Запросы
Этот раскрывающийся список предназначен для просмотра запроса. Используя simple_form, я могу получить = f.input :insertion, :collection => @ads
, чтобы вывести список названий объявлений в раскрывающемся списке. Я бы хотел, чтобы ad.title выступал в качестве optgroup. Затем я хотел бы, чтобы вставки объявлений служили в качестве выбираемого контента... так что-то вроде:
<select>
<optgroup label="Ad.Title">
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
</optgroup>
<optgroup label="Ad.Title">
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
<option value="Ad.Insertion.id">Ad.Insertion.Title</option>
</optgroup>
</select>
Может ли кто-нибудь предложить какие-либо рекомендации по созданию этой функции simple_form? Я бы очень признателен!
Пожалуйста, дайте мне знать, могу ли я рассказать вам что-нибудь еще о приложении, если у вас есть представление о том, как выполнить это свойство.
Спасибо заранее!
UPDATE: я смог получить что-то частично, используя:
= f.input(:insertion_id, :collection => Ad.order(:name), :as => :grouped_select, :group_method => :insertions)
Проблема заключается в том, что нет способа указать, какой столбец используется в качестве отображаемого текста из того, что я могу сказать. Я приветствую любые материалы.
Ответы
Ответ 1
После некоторых дополнительных исследований, лучше смотря на документацию и играя с синтаксисом, я решил то, что искал.
Стандартные Rails grouped_collection_select
выглядят следующим образом:
= f.grouped_collection_select(:insertion_id, Ad.order(:name),
:insertions, :name, :id, :title,
include_blank: "Please Choose...")
Это можно переделать при использовании simple_form 2.0 со следующим синтаксисом:
= f.input(:insertion_id, :collection => Ad.order(:name),
:as => :grouped_select,
:group_method => :insertions,
:group_label_method => :name,
:label_method => :title,
:include_blank => "Please Choose...")
Я надеюсь, что это поможет другим людям в будущем.
Ответ 2
Альтернативный метод:
<%= f.input :product_category do %>
<%= f.select :product_category, grouped_options_for_select(Product.PRODUCT_CATEGORY), include_blank: true %>
<% end %>
Это хорошо работает, когда вы пытаетесь сформировать выбор optgroup без использования активных модалов записи.
Ссылка:
https://github.com/plataformatec/simple_form#wrapping-rails-form-helpers
а также
http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-option_groups_from_collection_for_select