假设我有一个包含评论和帖子的经典博客应用程序。 在此应用程序中,注释始终嵌套在帖子下。
GET /posts/:posts_id/comments/:id ...
我想以某种方式覆盖URL帮助程序,以便我可以将它们视为注释不是嵌套资源。
要求:
评论只应使用嵌套网址:
/posts/:posts_id/comments/:id
我应该可以这样做:
comments_path @comment
和
redirect_to @comment
我试过:
我可以让Rails生成没有前缀的路由助手:
resources :posts
scope '/posts/:post_id' do
resources :comments
end
但由于comments_path(@comment)
未设置,ActionController::UrlGenerationError
仍然会给我post_id
。
我当然可以手动创建自己的帮助器方法,但是如果可能的话,我希望rails生成帮助器。
根据我的理解,路线助手是ActionDispatch::Routing::UrlFor
周围的胶合板。我一直在研究ActionDispatch::RoutingPolymorphicRoutes
,但我无法找到生成的帮助器如何将模型实例“序列化”为params。
是否可以创建一个模型方法,当路由助手将注释资源转换为参数时使用?
我在想to_param
。
答案 0 :(得分:2)
之前我对此有类似的要求,而我所做的只是在我的ApplicationController
中创建一个自定义帮助方法,如下所示:
class ApplicationController < ActionController::Base
...
def comment_path(comment)
post_comment_path(comment.post, comment)
end
helper_method :comment_path
end
这样,您仍然可以在视图,帮助器,控制器等中使用comment_path
,但它会使用完整的嵌套路径。
我不知道是否可以使用Rails内部实现,但很简单,我认为这不值得麻烦。