rails – 如何使用祖先制作嵌套路由
我有一个型号:
class Page < ActiveRecord::Base has_ancestry validates :slug, :name, uniqueness: true, presence: true before_validation :generate_slug def to_param slug end def generate_slug self.slug = Russian.translit(name).parameterize end end
我正在使用ancestry
gem创建页面和子页面树,即页面可以有多个子页面,子页面也可以有多个子页面,依此类推到无穷大。
但我的问题是,我无法制作的东西是/page-1/page-1-2/page-1-2-1
。 所有子页面的URL都是: /page-1-2
或/page-1-3-1
。
我的routes.rb:
Rails.application.routes.draw do get '/pages' => 'pages#index' resources :pages, path: "", path_names: { new: 'add' } root 'pages#index' end
如何制作嵌套url?
谢谢!
据我所知,没有采用动态永久链接捕获嵌套树结构路由的简洁方法,您可以创建一个命名路由来捕获相当嵌套的页面路径:
get '/p/*id', :to => 'pages#show', :as => :nested_pages
此外,请确保更新页面对象的slug
以具有嵌套的URL,即:将父页面的slug
附加到它。 例如:
page1.slug = '/page-1' page2.slug = '/page-1/page-2' # page2 is a child of page1 page3.slug = '/page-1/page-2/page-3' # page3 is a child of page2
因此,为了使其工作,您可以更改Page
模型类中的generate_slug
方法:
def generate_slug name_as_slug = Russian.translit(name).parameterize if parent.present? self.slug = [parent.slug, (slug.blank? ? name_as_slug : slug.split('/').last)].join('/') else self.slug = name_as_slug if slug.blank? end end
- 如何配置额外/不同的迁移文件夹
- 什么|| =在Ruby中做
- 无法在Ruby 2运行rails 3.2.11中加载此类文件–sqlite3 / sqlite3_native(LoadError)
- Rails使用表单对象渲染部分
- 如何防止Ruby钱浮点错误
- Rails使用respond_with destroy动作嵌套资源
- “条件字符串文字”是什么意思?
- *** RuntimeErrorexception:ActionView :: Helpers :: ControllerHelper#response委托给controller.response,但是控制器是nil
- 使用Ruby,Nokogiri和Mechanize在包含最多行的数组中查找表