我目前正在使用acts_as_tree gem并希望显示我的所有类别名称,以父类别名称分隔。这是我尝试过的。
<% @categories.each do |category| %>
<h4><%= category.parent.name if category.parent %></h4>
<%= category.name%>
<% end %>
它不起作用,因为每个孩子都在重复父母的头衔。我希望实现的是父母只展示一次,然后是其子女。
家长1
家长2
任何帮助表示赞赏!
答案 0 :(得分:1)
您可以先使用categories
共同对parent
进行分组,使用group_by
method作为枚举; e.g。
@categories.group_by(&:parent)
它将产生类似以下内容的哈希:
# {
# parent1 => [category1, category2],
# parent2 => [category3]
# }
# or
{#<Parent:0x007fa92582f930 @name="Parent1">=>
[#<Category:0x007fa92582f868
@name="Category1",
@parent=#<Parent:0x007fa92582f930 @name="Parent1">>,
#<Category:0x007fa92582f7c8
@name="Category2",
@parent=#<Parent:0x007fa92582f930 @name="Parent1">>],
#<Parent:0x007fa92582f8b8 @name="Parent1">=>
[#<Category:0x007fa92582f750
@name="Category3",
@parent=#<Parent:0x007fa92582f8b8 @name="Parent1">>]}
然后你迭代每个Parent及其分组的类别,在你的视图模板中渲染,如下所示:
<% @categories.group_by(&:parent).each do |parent, categories| %>
<h4><%= parent.name if parent %></h4>
<% categories.each do |category| %>
<%= category.name %>
<% end %>
<% end %>
答案 1 :(得分:1)
我认为你可以完成类似的事情:
<% parents.each do |parent| %>
<h4><%= parent.name %></h4>
<% parent.children.each do |child| %>
<%= child.name %>
<% end %>
<% end %>
所以对你的例子来说:
<% @categories.parents.each do |parent| %>
<h4><%= parent.name %></h4>
<% parent.children.each do |category| %>
<%= category.name %>
<% end %>
<% end %>
根据您的类别模型的父级名称,您还可以执行以下操作:
Parent.tree_view(:name)
答案 2 :(得分:0)
究竟是什么category.parent
?如果它不是nil或显式为false,则<h4><%= category.parent.name if category.parent %></h4>
将始终显示category.parent.name
,因为if语句必须检查category.parent
是否存在。假设每个孩子都有父母,那么每次都会显示父母。你必须改变if语句。
抱歉,我无法提供更多帮助,如果您修改帖子以包含category
或parent
中的代码,也许我可以提出建议。
答案 3 :(得分:0)
这就是我的意思。
let x = 2;
但是,此工作仅适用于1级别类别。 如果您需要深层次类别,则可能需要为此定义递归方法。