加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 用于动态页面的Rails嵌套路由

发布时间:2020-12-17 02:09:29 所属栏目:百科 来源:网络整理
导读:在我的Rails应用程序中,我有存储在数据库中的页面. 例如: id: 1name: 'About'slug: 'about'parent_id: nullid: 2name: 'Team'slug: 'team'parent_id: 1id: 3name: 'Cameron'slug: 'cameron'parent_id: 2 slug用于通过路由访问它们,如下所示: match '/:slug
在我的Rails应用程序中,我有存储在数据库中的页面.

例如:

id: 1
name: 'About'
slug: 'about'
parent_id: null

id: 2
name: 'Team'
slug: 'team'
parent_id: 1

id: 3
name: 'Cameron'
slug: 'cameron'
parent_id: 2

slug用于通过路由访问它们,如下所示:

match '/:slug' => 'pages#show',:via => :get,:as => :page

所以我可以访问这些页面:

/about
/team
/cameron

我想要做的是使用parent_id,以便路由成为:

/about/team/cameron

这可以单独使用路由来实现吗?或者我还需要做其他事情吗?

解决方法

在 Friendly gem处获得帮助,它可以简化使用slug的路由.

定义路线的替代选项

据我所知,使用动态paramlinks的路由没有好办法,你可以创建一个命名路由来捕获漂亮的嵌套页面路径:

get '/p/*id',:to => 'pages#show',:as => :nested_pages

此外,请确保更新页面对象的slug以具有嵌套的URL,即:将父页面的slug附加到它.例如:

page1.slug = '/about'
 page2.slug = '/about/team' # team is a child of about
 page3.slug = '/about/team/cameron' # cameron is a child of team

这样你就可以做到这一点

get '/p/*id',:as => :nested_pages or pages

因此,为了使这项工作,您可以更改Page模型类中的generate_slug方法:

def generate_slug
   name_as_slug = 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读