私は私のRailsアプリで以下のレコードいる:私はそうのようなリストでそれらをグループのレコードが
id: 1
name: 'About'
slug: 'about'
permalink: '/about'
parent_id: null
id: 2
name: 'Team'
slug: 'team'
permalink: '/about/team'
parent_id: 1
id: 3
name: 'Cameron'
slug: 'cameron'
permalink: '/about/team/cameron'
parent_id: 2
を示しています。
:これはのようなリストを作成する<ul>
<% @pages.each do |page| %>
<li>
<%= page.parent.title rescue '' %><br>
<%= page.permalink %>
</li>
<% end %>
</ul>
<ul>
<li>About<br>/about</li>
<li>Team<br>/about/team</li>
<li>Cameron<br>/about/team/cameron</li>
</ul>
ただし、parent_idを使用してグループ化する次のようなネストされたリストを作成します。
<ul>
<li>About<br>/about</li>
<li>-- Team<br>/about/team</li>
<li>---- Cameron<br>/about/team/cameron</li>
</ul>
コントローラーで簡単にグループ化する方法はありますか?
私が出ている最高のアイデアは、コントローラでこれを行うことです:ビュー内
@pages = Page.where(parent_id: nil)
そして、この:
部分的にを使用して<% @pages.each do |page| %>
<%= render 'page_row', :page => page, :sub => 0 %>
<% page.pages.each do |page| %>
<%= render 'page_row', :page => page, :sub => 1 %>
<% page.pages.each do |page| %>
<%= render 'page_row', :page => page, :sub => 2 %>
<% page.pages.each do |page| %>
<%= render 'page_row', :page => page, :sub => 3 %>
<% end %>
<% end %>
<% end %>
<% end %>
巣を作りなさい:
<%
$i = 0
$num = sub
prefix = ''
while $i < $num do
prefix += '---'
$i +=1
end
%>
<li>
<%= prefix %> <%= page.parent.title rescue '' %><br>
<%= page.permalink %>
</li>
しかし、私がやっていたように手作業でループすることで、ネストは4レベルまでしか制限されず、コードはあまり良くありません。
ページのネストされたビューを作成するために手動でループせずに同じ結果を得るにはどうすればよいですか?私はどうなるのか
部分ページで
ビューで@top_level_pages = Page.where(parent_id: nil)
あなたはレベルの一定の数を持っていますか、またはこれは理論的には無制限ですか? –
無制限です。 – Cameron
亀のように無制限に、無制限に3段階の柔軟性が必要です。前者は再帰を介して処理することができます。後者はSQL戻り値の順序句になり、ビューでgroup_byを使用します。 – engineerDave