パス ヘルパーをオーバーライドする方法を知っていると思っていましたが、期待どおりの動作が得られません。
ApplicationHelper に次のようなものを追加してみました:
def post_path(post)
"/posts/#{post.id}/#{post.url}"
end
しかし、何らかの理由で、私のコントローラの 1 つで使用しようとするpost_path(@post)
と、完全な URL が返されるだけ/posts/4faddb375d9a1e045e000068/asdf
です/posts/4faddb375d9a1e045e000068/post-title-here
。
私のルートファイルでは:
get '/posts/:id/:slug' => 'posts#show', :as => 'post'
奇妙なことに、 を使用するpost_path(@post, @post.url)
と正しく動作します。ビューで使用すると、post_path(@post)
正しく機能します。( @post.url
URL のわかりやすいタイトルを返します)
わからない場合は、URL に ID と最後にスラッグが含まれるスタックオーバーフローと同様の動作を最終的に取得しようとしています。スラッグが指定された ID のモデルと一致しない場合は、正しい URL にリダイレクトします。