生成一个完整的足智多谋的路径,只将最后一个资源提供给路由助手
Generating a full resourceful path giving only the last resource to the routes helper
简而言之
# routes.rb
resources :article do
resources :comments do
resources :replies
end
end
我希望reply_path
生成与article_comment_reply_path
相同的路径
更多详情
我有一些资源想链接到 URL,但我不想每次都将所有这些资源都提供给助手:
article_comment_reply_path(@reply.comment.article, @reply.comment, @reply)
# /articles/:acticle_id/comments/:comment_id/replies/:id
相反,我想做的是:
reply_path(@reply)
url_for [@reply]
link_to 'View reply', @reply
但这会生成/replies/:id
我确实在控制器级别解决了这个问题,方法是检查是否设置了 :article_id
和 :comment_id
,如果没有设置,则将用户重定向到 article_comment_reply_path
。但这会导致 2 个问题:
- 双重重定向,浪费服务器资源。
<a>
元素中的 href
与页面 url 不同,因此更难确定它是否是 active
link .
有没有办法让 url 助手根据其父资源生成自定义路径?
我想我在这里找到了你需要的东西:
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/CustomUrls.html#method-i-direct
direct :reply do |reply|
[ reply.comment.article, reply.article, reply ]
end
direct :edit_reply do |reply|
[ :edit, reply.comment.article, reply.article, reply ]
end
简而言之
# routes.rb
resources :article do
resources :comments do
resources :replies
end
end
我希望reply_path
生成与article_comment_reply_path
更多详情
我有一些资源想链接到 URL,但我不想每次都将所有这些资源都提供给助手:
article_comment_reply_path(@reply.comment.article, @reply.comment, @reply)
# /articles/:acticle_id/comments/:comment_id/replies/:id
相反,我想做的是:
reply_path(@reply)
url_for [@reply]
link_to 'View reply', @reply
但这会生成/replies/:id
我确实在控制器级别解决了这个问题,方法是检查是否设置了 :article_id
和 :comment_id
,如果没有设置,则将用户重定向到 article_comment_reply_path
。但这会导致 2 个问题:
- 双重重定向,浪费服务器资源。
<a>
元素中的href
与页面 url 不同,因此更难确定它是否是active
link .
有没有办法让 url 助手根据其父资源生成自定义路径?
我想我在这里找到了你需要的东西: https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/CustomUrls.html#method-i-direct
direct :reply do |reply|
[ reply.comment.article, reply.article, reply ]
end
direct :edit_reply do |reply|
[ :edit, reply.comment.article, reply.article, reply ]
end