带有optgroup标签的awesome_nested_set

时间:2012-06-14 03:31:07

标签: ruby-on-rails-3 optgroup

我正在使用位于https://github.com/collectiveidea/awesome_nested_set的awesome_nested_set gem。我想制作父类别optgroup标签,但我不知道如何实现这一点或甚至可能。这个行为的某个地方有例子吗?

2 个答案:

答案 0 :(得分:1)

这当然不是最有效的方法,但它符合任务的要求。

  <select name="category_id" data-placeholder="Select a Category" class="chzn-select">
     <option value=""></option>
     <% @cats.each do |cat| %>
     <optgroup label="<%= cat.name %>">
        <% cat.children.each do |child| %>
        <option value="<%= child.id %>"><%= child.name %></option>
        <% end %>
     </optgroup>
     <% end %>
  </select>

答案 1 :(得分:0)

有点晚了,但我有同样的问题并根据https://github.com/collectiveidea/awesome_nested_set/blob/master/lib/awesome_nested_set/helper.rb使用辅助方法解决了它

module ApplicationHelper
  def grouped_nested_set_options(class_or_item, mover = nil)
    if class_or_item.is_a? Array
      items = class_or_item.reject { |e| !e.root? }
    else
      class_or_item = class_or_item.roots if class_or_item.respond_to?(:scope)
      items = Array(class_or_item)
    end
    result = []
    group = []
    items.each do |root|
      root.class.associate_parents(root.self_and_descendants).map do |i|
        if i.level == 0
          group = []
          group.push yield(i)
          group.push []
          result.push group
        else
          if mover.nil? || mover.new_record? || mover.move_possible?(i)
            group[1].push [yield(i), i.primary_id]
          end
        end
      end.compact
    end
    result
  end
end

这样你就可以使用grouped_nested_set_options而不是nested_set_options,你仍然可以使用rails&#39;表单助手生成html。