创建一个optgroup在Rails 3.2上使用simple_form gem

时间:2012-04-09 22:12:14

标签: ruby-on-rails simple-form optgroup

http://simple-form.plataformatec.com.br/#usage/collections的simple_form 2.0中,似乎只有一些关于grouped_select功能的文档。文档提供了这一行:

f.input :country_id, :collection => @continents, :as => :grouped_select, :group_method => :countries

但这似乎并没有给我足够的背景来使其发挥作用。这就是我所拥有的。

我有三种模式:查询,广告和插入

广告has_many插入,插入所属广告 查询belongs_to插入,插入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功能有效的建议吗?我真的很感激!

如果您对如何执行此属性有深入了解,请告诉我是否可以告诉您有关该应用的任何其他信息。

提前致谢!

更新:我已经能够使用以下方式获得部分工作:

= f.input(:insertion_id, :collection => Ad.order(:name), :as => :grouped_select, :group_method => :insertions)

这个问题是没有办法从我能说的内容中指定用作显示文本的列。我欢迎任何意见。

2 个答案:

答案 0 :(得分:20)

经过一些额外的研究,更好地阅读文档,并使用语法,我已经解决了我想要的问题。

标准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...")

我希望将来帮助其他人。

答案 1 :(得分:0)

另一种方法是:

<%= 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-helpershttp://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-option_groups_from_collection_for_select