【发布时间】:2012-08-24 17:11:38
【问题描述】:
所以,我正在为我的 rails 应用程序实现一个漂亮/SEO 友好的 URL 方案。我有一个名为 Artist 的模型,我希望 Rails artist_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 在调用 artist_path 时始终实例化对象并在其上调用 to_param,即使只指定了 ID?
【问题讨论】:
-
我刚刚发现了这个gist,它承认路由助手的这种行为,但只说(释义)“只是不要只用 id 调用助手”。这是解决方案吗?我希望不会,因为我不想要开发者to have to know of any limitation specific to this model。
标签: ruby-on-rails activerecord seo routes helpers