首页 > 解决方案 > 具有可覆盖树路径 slug 的 FriendlyID

问题描述

我目前正在使用 Ancestry 来管理结构为树的模型,尽管树的确切实现并不重要。

给定具有以下属性的模型:

class Item < ActiveRecord::Base
  extend FriendlyId

  attr_accessor :name :slug, :url_path 

  has_ancestry
  acts_as_list scope: :ancestry

  friendly_id METHOD, use: %i[slugged finders]
end

whereslug是用户指定的,并且url_path是 的完整友好 ID Item,它是所有祖先项目的 s 的组合,slug/

例如/foo/bar/baz,将指向一个带有 slug 的项目,该项目的baz祖先带有 slugfoobar

我尝试了以下方法:

class Item < ApplicationRecord
    extend FriendlyId

    friendly_id :path, use: %i[slugged finders]

    acts_as_list scope: :ancestry, top_of_list: 0

    has_ancestry

    def path
        :slug if ancestry.nil?
        (ancestors.collect(&:slug) << slug).join('/')
    end
end

但是,当给定相同的foo => [bar => baz]项目时,结果foo-bar-baz不是foo/bar/baz-- 如何让我的 URL 路径与树位置与/分隔符匹配?

标签: ruby-on-railsfriendly-idancestry

解决方案


推荐阅读