2

我在这里使用 Sky Eagles 嵌套镶嵌宝石。

我只允许深度为两深,并且我有一个保存前过滤器检查深度,但我似乎无法让它在视图中限制它,所以客户甚至没有选择的选项它。我正在使用所描述的视图助手,如图所示。

应用程序/视图/_form.html.erb

<%= form_for(@category) do |f| %>
  <p>
    <%= f.label(:name) %>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label(:parent_id) %>
    <%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %>
  </p>
  <p>
    <%= f.submit("Submit") %>
  </p>
<% end %>

我主要感兴趣的是这个

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %>

现在它总是返回嵌套集的所有级别,但我只希望显示根节点,因为我只允许两个深度。我被困在这里,因为当我在这里查看代码时,我只看到一个包含 root 的选项,这是真的,我可以接受。我试过这样做

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" if i.level < 1} %>

但这所做的只是将级别低于 2 的选项排除在外,我需要它实际上根本不返回它们。

那么,如何让 nested_set_options 只返回根,而不是任何具有深度的类别?提前致谢

4

1 回答 1

2

我认为您在这里使用了错误的助手。nested_set_options也是为了得到所有的后代而写的。我建议只手动添加它:

f.select :parent_id, Category.roots.collect {|c| [ c.name, c.id ] }
于 2012-04-15T10:14:46.210 回答