使用Gretel gem在Rails中复制Breadcrumbs

时间:2014-03-14 18:36:42

标签: ruby-on-rails relationship breadcrumbs

我正在使用Gretel gem将痕迹痕迹添加到我自定义构建的照片库中。

图库模型之间的关系是:

收集:

has_many :children, class_name: "Collection", foreign_key: "parent_id"
belongs_to :parent, class_name: "Collection", foreign_key: "parent_id"
has_many :albums

专辑:

has_many :photos, :dependent => :destroy
belongs_to :collection

然后我将一些Gretel面包屑定义为:

crumb :collection do |collection|
  link collection.title, gallery_collection_path(collection)
  if collection.parent
    parent :collection, collection.parent
  else
    parent :gallery
  end
end

crumb :albums do |parent_collection|
  link parent_collection.title, gallery_collection_albums_path(parent_collection, :albums)
  parent :collection, parent_collection
end

在导航时我会在我到达相册后立即得到跟踪的跟踪:

  

主页>画廊>节日>主题公园>奥尔顿塔>奥尔顿塔

第一个“Alton Towers”的网址是

  

/集合/ 617

,第二个是:

  

/集合/ 617 /相册

我认为与我的Collections控制器有关的事情搞乱了,因为如果集合中没有子节点,我的Collections Show操作会重定向到我的Albums Index操作(因此需要显示相册列表)

收集控制器是:

   def index
      @size = :medium
      @title = 'Gallery'
      @collections = Collection.roots
   end

   def show
      @collection = Collection.find_by_id(params[:id])
      if @collection.has_children?
         @collections = @collection.children
         @size = :medium
         @title = @collection.title
      else
         redirect_to [:gallery, @collection, :albums]
      end
   end

关于如何解决此问题的任何想法,以便在查看我的相册索引页面时获得以下所需的输出?:

  

主页>画廊>节日>主题公园>奥尔顿塔

1 个答案:

答案 0 :(得分:0)

通过在收集crumb中添加一些额外的逻辑来解决这个问题,看看孩子是否是一张专辑,如果是这样,它会跳过为该步骤输出的碎屑