2

パス ヘルパーをオーバーライドする方法を知っていると思っていましたが、期待どおりの動作が得られません。

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.urlURL のわかりやすいタイトルを返します)

わからない場合は、URL に ID と最後にスラッグが含まれるスタックオーバーフローと同様の動作を最終的に取得しようとしています。スラッグが指定された ID のモデルと一致しない場合は、正しい URL にリダイレクトします。

4

1 に答える 1

0

私がしようとしているのは、全体を に入れ、def post_pathそれapplication_controller.rbを のヘルパーにすることhelper_method :post_pathです。両方の長所を活用できます。

于 2012-05-12T23:29:44.233 に答える