因此,我正在为我的 rails 应用程序实现一个漂亮/SEO 友好的 URL 方案。我有一个名为 Artist 的模型,我希望 Railsartist_path
助手始终生成友好版本的路径。
在我的 routes.rb 文件中,我有以下行:
get 'artists/:id(/:slug)', :to => 'artists#show', :as => 'artist'
如果 slug 被遗漏或不正确(它由艺术家姓名计算),则控制器 301 重定向到正确的 URL。但是,出于 SEO 的原因,我想确保我网站内部的所有链接都具有正确的起始 URL。
Artist 模型具有以下两个(非常简单的)功能以使其工作:
def slug
name.parameterize
end
def to_param
"#{id}/#{slug}"
end
如果我artist_path
用艺术家对象调用,这将按预期工作:
> app.artist_path(Artist.find 1234)
=> "/artists/1234/artist-name"
但是,当我只使用 ID 调用它时,它似乎根本没有使用 to_param:
> app.artist_path(id: 1234)
=> "/artists/1234"
tl;dr:如何强制 Rails 始终实例化对象并在调用to_param
时调用它artist_path
,即使只指定了 ID?