我以为我知道如何覆盖路径助手,但我没有得到预期的行为。
我尝试将这样的内容添加到我的 ApplicationHelper 中:
def post_path(post)
"/posts/#{post.id}/#{post.url}"
end
但由于某种原因,在我的一个控制器中,当我尝试使用post_path(@post)
它时,它只返回完整的 url,类似于/posts/4faddb375d9a1e045e000068/asdf
(这是浏览器中的当前 url)而不是/posts/4faddb375d9a1e045e000068/post-title-here
.
在我的路线文件中:
get '/posts/:id/:slug' => 'posts#show', :as => 'post'
奇怪的是,如果我使用post_path(@post, @post.url)
,它可以正常工作。如果在视图中我使用post_path(@post)
它可以正常工作。(@post.url
返回 url 友好的标题)
万一你不知道,我试图最终得到类似于stackoverflow的行为,其中url包含id和最后一个slug,如果slug与给定id的模型不匹配,它会重定向到正确的网址。