Friendly_id 和两个 slug 从根开始

Posted

技术标签:

【中文标题】Friendly_id 和两个 slug 从根开始【英文标题】:Friendly_id and two slug start from root 【发布时间】:2018-02-02 11:49:19 【问题描述】:

我有两个模型 - Post 和 Page,它们都有从第一个斜杠开始的路径。例如:

    domain.com/first-slug - 这是帖子 domain.com/second-slug - 这是页面

我可以像这样创建控制器,作为 ContentController 和处理 slug:

class ContentsController < ApplicationController
  def show
    @page = Page.find_by(slug: params[:id])
    @post = Post.find(params[:id]) unless @page
  end
end

但是我对 gems 有一些问题,它使用 controller_name 方法来定义模型类。

第二种解决方案,当我使用 PageController 和 PostController 和路由时:

get '/*id', to: 'pages#show', as: :page
get '/*id', to: 'posts#show', as: :post

当然会发生无限循环

还有其他方法可以解决这种非标准方法吗?

【问题讨论】:

【参考方案1】:

当然,我必须在路径中使用约束。例如:

get '/*id', to: 'posts#show', as: :post, constraints:  id: /\d4\/\d2\/\d2\/\w.+/ 
get '/*id', to: 'pages#show', as: :page

【讨论】:

以上是关于Friendly_id 和两个 slug 从根开始的主要内容,如果未能解决你的问题,请参考以下文章

如何将 id 添加到 Friendly_id slug?

friendly_id:可选择更新 slug

Friendly_id 不为旧记录创建 slug

Rails gem“friendly_id”:如何在创建对象之前获得 slug 的实时预览

Rails Friendly_id:Slug 未正确生成

rails,friendly_id,设计用户名不显示 slug