【问题标题】:How to generate a breadcrumb structure?如何生成面包屑结构?
【发布时间】:2022-01-20 08:37:46
【问题描述】:

我正在构建一个 Rails 5.2 应用程序。 在这个应用程序中,我得到了通过 page_id 属性链接在一起的 Page 对象。 我正在寻找一种从选定的 Page 对象中打印出完整的面包屑结构的方法。

我试过这段代码,但它只显示第一级:

def self.breadcrumbs page_id
    page = Page.find page_id
    return page unless page.page_id
    breadcrumbs page.page_id
  end

所以如果我得到三个 Page 对象并且我使用的对象 ID 是 2:

Page A
id: 1
page_id: 0
title: "Page A"

Page B
id: 2
page_id: 1
title: "Page B"

Page C
id: 3
page_id: 2
title: "Page C"

我正在寻找的输出是:

Page A > Page B > Page C

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    虽然您编写的函数是递归的——它不会构建任何东西,但它总是会返回面包屑的根。

    这应该将层次结构构建到所选页面...

    def self.breadcrumbs(page_id)
      page_breadcrumbs = []
      current_page = Page.find page_id
      
      parent_page = Page.find_by(id: current_page.page_id)
      if parent_page.present?
        page_breadcrumbs = breadcrumbs(parent_page.id)
      end
      page_breadcrumbs << current_page
      return page_breadcrumbs
    
    end
    

    然后显示,像这样......

    @breadcrumbs = Page.breadcrumbs(2)
    
    <% @breadcrumbs.each_with_index do |breadcrumb, idx| %>
      <% if idx < @breadcrumbs.length %>
        <%= link_to breadcrumb.title, page_path(breadcrumb.id) %> >
      <% else %>
        <%= breadcrumb.title %>
      <% end 
    <% end %>
    

    顺便说一句,我认为部分问题是 page_id 令人困惑,我会使用 parent_page_id 来表明您想要一个层次结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多