我有一个帖子模型belongs_to: Category
。
当我创建帖子时,我可以从它所属的类别列表中进行选择。 我的模型类别具有名称和性别属性。 因此,例如,一些类别是“附件”,“牛仔裤”,“衬衫”(性别“男性”),性别“女性”相同。
我可以在男女之间的所有类别名称之前,即:“男士牛仔裤”,“女士牛仔裤”,但我更愿意将f.select
分为两部分 - “男士”, “妇女”。看起来像这样的东西:
Men
Accessories
Jeans
etc
Women
Accessories
Jeans
etc
该类别确实具有性别属性,因此我可以区分ID和ID,因为前10个id属于男性,接下来10个属于女性。我只是不知道如何在f.select
内展示这一点。这是我目前的select
:
<%= f.select :category_id, @categories.collect {|c| [ c.name, c.id ]} %>
任何帮助都将一如既往地受到高度赞赏!
修改
好吧我的助手方法是
def option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method)
collection.map do |group|
option_tags = options_from_collection_for_select(
group.send(group_method), option_key_method, option_value_method)
content_tag(:optgroup, option_tags, :label => group.send(group_label_method))
end.join.html_safe
end
并选择
<%= f.select(:type_id, option_groups_from_collection_for_select(@categories, :types, :category, :id, :name)) %>
这是正确的类别&amp;键入并且看起来不错,但是当我去编辑帖子时,选择不显示当前选择的项目。
答案 0 :(得分:1)
见grouped_collection_select。它看起来像这样:
<%= f.grouped_collection_select(:category_id, Category.top_level, :children, :name, :id, :name %>