Rails 3嵌套资源不在同一名称空间中

时间:2013-03-11 04:11:20

标签: ruby-on-rails ruby ruby-on-rails-3

我的路线文件中有以下内容:

namespace :forum do
  resources :topics
  resources :posts do
    resources :comments
  end
end

所以主题和帖子控制器都在论坛模块(Forum::TopicsControllerForum::PostsController)内,但是评论控制器不是(它只是CommentsController),因为它是多态的(所以在一些控制器)。

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

我试过了,但没有奏效:

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

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

3 个答案:

答案 0 :(得分:1)

好的,我想你想重新使用Comments控制器中的代码。是对的吗?如果是这样,我不知道这个问题的任何直接答案,但我想你可能会考虑这样的事情。

comments_controller.rb

module forum
  module posts
   class CommentsController < ApplicationController
     include Commentable
   end
  end
end

commentable.rb

module Commentable 

end

现在,您可以在任何想要使用的地方使用此可注释模块。因此,您将重用具有两个功能的常用代码: 1.你可以自由地改变每个控制器的行为 2.您必须为每个控制器创建单独的文件。

答案 1 :(得分:1)

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

例如

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

所以你的评论控制器不必坐在其他模块中

答案 2 :(得分:1)

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

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