FriendlyID с переопределенными слагами пути дерева - PullRequest
0 голосов
/ 18 февраля 2020

В настоящее время я использую 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

Где slug является либо указанным пользователем, а url_path - это полный friendly_id Item, который представляет собой комбинацию slug s для всех исконных предметов, соединенных с /

например, /foo/bar/baz будет указывать на элемент с слагом baz, у которого есть предки с слизнями foo и bar

Я пробовал следующее:

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-адрес, соответствующий местоположению дерева с разделителями /?

...