Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3嵌套资源不在同一命名空间中_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails 3嵌套资源不在同一命名空间中

Ruby on rails Rails 3嵌套资源不在同一命名空间中,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的路由文件中包含以下内容: namespace :forum do resources :topics resources :posts do resources :comments end end 因此,主题和帖子控制器位于论坛模块内(Forum::TopicsController和Forum::PostsController),但评论控制器不是(它只是commentscoontroller),因为它是多态的(因此在一些控制器之间共享) 问题是应用程序查找显然不存在的论

我的路由文件中包含以下内容:

namespace :forum do
  resources :topics
  resources :posts do
    resources :comments
  end
end
因此,主题和帖子控制器位于论坛模块内(
Forum::TopicsController
Forum::PostsController
),但评论控制器不是(它只是
commentscoontroller
),因为它是多态的(因此在一些控制器之间共享)

问题是应用程序查找显然不存在的
论坛::CommentsController
,如何为该资源定义没有模块

我试过了,但没有成功:

namespace :forum do
  resources :topics
  resources :posts do
    resources :comments, controller => 'comments'
  end
end

任何帮助都将不胜感激,谢谢

好的,我想您应该重新使用Comments controller中的代码。是这样吗?如果是这样的话,我不知道这个问题的任何直接答案,但我想你可能会考虑这样的事情。 注释\u controller.rb 现在,您可以在任何您想使用的地方使用此可注释模块。因此,您正在使用具有两个功能的通用代码: 1.您可以自由更改每个控制器的行为
2.您必须为每个控制器创建单独的文件

好的,我想您应该重新使用Comments controller中的代码。是这样吗?如果是这样的话,我不知道这个问题的任何直接答案,但我想你可能会考虑这样的事情。 注释\u controller.rb 现在,您可以在任何您想使用的地方使用此可注释模块。因此,您正在使用具有两个功能的通用代码: 1.您可以自由更改每个控制器的行为
2.您必须为每个控制器创建单独的文件

您还可以手动设置注释的路径

比如说

match '/forums/:forum_id/posts/:post_id/comments/:comment_id' => 'comments#show'

因此,您的评论控制器不必位于其他模块中

您也可以手动设置评论的路线

比如说

match '/forums/:forum_id/posts/:post_id/comments/:comment_id' => 'comments#show'
因此,您的Comments controller不必位于其他模块中

它不是最干净的(我不确定是否有更好的方法来实现这一点),但您可以使用范围而不是名称空间,然后明确地为论坛名称空间中的资源设置控制器:

scope '/forum' do
  resources :topics, controller => 'forum/topics'
  resources :posts, controller => 'forum/posts' do
    resources :comments
  end 
end
它不是最干净的(我不确定是否有更好的方法实现这一点),但您可以使用范围而不是名称空间,然后明确地为论坛名称空间中的资源设置控制器:

scope '/forum' do
  resources :topics, controller => 'forum/topics'
  resources :posts, controller => 'forum/posts' do
    resources :comments
  end 
end

实际上,rails将查找/forum/posts/:post\u id/comments/not for/forum/comments/我的意思是从控制器的角度来看,因此我得到了错误
ActionController::RoutingError(未初始化的常量forum::comments controller)
controller是多态的吗?你是对的,
Comments
模型是多态的。实际上,rails将从控制器的角度查找/forum/posts/:post\u id/Comments/not for/forum/Comments/我的意思是,我得到了错误
ActionController::RoutingError(未初始化的常量forum::Comments controller)
控制器是多态的吗?你说得对,
注释
模型就是多态模型。谢谢!我尝试了你的答案,它确实起了作用,但是路线名称在他们的名字上掉了论坛,我依赖这些。谢谢!我尝试了你的答案,它确实起了作用,但路线名称放弃了论坛上的名称,我依赖于这些。谢谢,我结束了使用这个答案,它对其他内容(如路线名称)的影响较小。谢谢,我结束了使用这个答案,它对其他内容(如路线名称)的影响较小。有趣,它需要更多的返工,所以我结束了使用其他答案,但这绝对是一个需要考虑的改进我的代码,谢谢!有趣的是,它需要更多的返工,所以我结束了使用其他答案,但这绝对是一个需要考虑的改进我的代码,谢谢!