Friendly_id 和两个 slug 从 root 开始

Friendly_id and two slug start from root

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

  1. domain.com/first-slug - it's Post
  2. domain.com/second-slug - it's Page

我可以像这样创建控制器,如 ContentController 和 process slug:

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

但我对使用 controller_name 方法定义模型 class.

的 Gems 有一些问题

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

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

当然是无限循环

还有其他方法可以解决这种不规范的方法吗?

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

get '/*id', to: 'posts#show', as: :post, constraints: { id: /\d{4}\/\d{2}\/\d{2}\/\w.+/ }
get '/*id', to: 'pages#show', as: :page