如何在f.select输入中创建节?

时间:2013-12-11 15:42:23

标签: ruby-on-rails ruby twitter-bootstrap ruby-on-rails-4

我有一个帖子模型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;键入并且看起来不错,但是当我去编辑帖子时,选择不显示当前选择的项目。

1 个答案:

答案 0 :(得分:1)

grouped_collection_select。它看起来像这样:

<%= f.grouped_collection_select(:category_id, Category.top_level, :children, :name, :id, :name %>