Friendly_id 和两个 slug 从 root 开始
Friendly_id and two slug start from root
我有两个模型 - Post 和 Page,它们都有一条从第一个斜线开始的路径。例如:
- domain.com/first-slug - it's Post
- 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
我有两个模型 - Post 和 Page,它们都有一条从第一个斜线开始的路径。例如:
- domain.com/first-slug - it's Post
- 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