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