我很想知道 Rails 如何自动推断嵌套资源的父级。我在 RouteSet 中做了一些功课,但在所有 module_eval 和动态生成的方法中,我还没有弄清楚它是如何推断父级的。
这就是我要说的具体
假设具有适当模型和控制器的常青帖子和评论数据层次结构。
这些的嵌套路由看起来像这样
resources :posts do
resources :comments
end
当我在控制器或评论视图的上下文中时,rails 能够像这样推断帖子:
post_comments_path
这将映射到当前帖子下的评论索引。
当我在帖子控制器和视图的上下文中时,我的 rails 无法再推断这条路线的帖子,需要我提供它。
post_comments_path # error
post_comments_path(@post) # ok
在其他线程中已建议第二行是正确的方法。
我可能疯了,但我很想知道 Rails 是如何推断 Post 的。我有一个极端情况,其中一个或两个操作在根控制器上,用于菜单列出大多数嵌套内容的路由。我更愿意告诉Rails 这几个动作的当前父级是什么,而不是在我的视图代码中到处都是显式的父级引用。
更新:
我确实尝试了设置 post_id 参数的基本方法。验证它确实在 request-params 和 params 上都设置了但没有成功。我对 Rails 制作参数的副本有模糊的记忆,所以路由助手可能有一个单独的副本而没有我添加的参数?(设置@post 实例变量也没有效果。我只需要检查一下。)