规范的解决方案是to_param
在您的模型中覆盖以返回唯一的、与 url 兼容的页面名称:
def to_param
title.parameterize
end
这样,所有 url 助手都将使用这个值来构建 url:
page_path(@some_page) # => 'pages/some-page-title'
然后在您的控制器中,您将不得不以某种方式实现一个查找器方法,该方法能够从其参数中获取页面(该参数将在 中可用params[:id]
)。它通常是这样的:
class Page < ActiveRecord::Base
def self.from_param(param)
where(title: param).first
end
def self.from_param!(param)
from_param(param) || fail(ActiveRecord::RecordNotFound)
end
end
现在,如果您希望您的页面可以从根路径访问,您可以执行以下操作:
Rails.application.routes.draw do
resources :pages, path: '/'
end
谨防 !将此路线放在 的末尾routes.rb
,否则它将捕获所有内容。