我以为我知道如何覆盖路径助手,但我没有达到预期的行为。
我尝试将类似的内容添加到我的ApplicationHelper中:
def post_path(post)
"/posts/#{post.id}/#{post.url}"
end
但由于某些原因,当我尝试使用post_path(@post)
时,在我的一个控制器中,它只返回完整的URL,例如/posts/4faddb375d9a1e045e000068/asdf
(这是浏览器中的当前URL),而不是{ {1}}。
在我的路线档案中:
/posts/4faddb375d9a1e045e000068/post-title-here
奇怪的是,如果我使用get '/posts/:id/:slug' => 'posts#show', :as => 'post'
,它可以正常工作。如果在视图中我使用post_path(@post, @post.url)
它可以正常工作。 (post_path(@post)
返回网址友好标题)
如果您无法分辨,我正在尝试最终获得类似于stackoverflow的行为,其中url包含id和末尾的slug,如果slug与具有给定id的模型不匹配,它会重定向到正确的网址。
答案 0 :(得分:0)
我要尝试的是将整个def post_path
放在application_controller.rb
中并使其成为helper_method :post_path
的助手。你将获得两全其美的好处。