Создание 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