そこで、Rails アプリにプリティ/SEO フレンドリーな URL スキームを実装しています。Artist というモデルがあり、Railsartist_path
ヘルパーが常にわかりやすいバージョンのパスを生成するようにしたいと考えています。
私の routes.rb ファイルには、次の行があります。
get 'artists/:id(/:slug)', :to => 'artists#show', :as => 'artist'
スラッグが省略されているか、正しくない場合 (アーティスト名によって計算されます)、コントローラ 301 は正しい URL にリダイレクトします。ただし、SEO の理由から、サイト内のすべてのリンクが最初から正しい URL を持っていることを確認したいと考えています。
Artist モデルには、これを機能させるために次の 2 つの (非常に単純な) 関数があります。
def slug
name.parameterize
end
def to_param
"#{id}/#{slug}"
end
アーティスト オブジェクトで呼び出すartist_path
と、これは意図したとおりに機能します。
> app.artist_path(Artist.find 1234)
=> "/artists/1234/artist-name"
ただし、ID だけで call it を使用すると、to_param はまったく使用されないようです。
> app.artist_path(id: 1234)
=> "/artists/1234"
tl;dr: ID のみが指定されている場合でも、 Rails が常にオブジェクトをインスタンス化し、呼び出されたときに呼び出すように強制するにはどうすればよいですか?to_param
artist_path