我的路线文件中有以下内容:
namespace :forum do
resources :topics
resources :posts do
resources :comments
end
end
所以主题和帖子控制器都在论坛模块(Forum::TopicsController
和Forum::PostsController
)内,但是评论控制器不是(它只是CommentsController
),因为它是多态的(所以在一些控制器)。
问题是应用程序查找显然不存在的Forum::CommentsController
,如何为该资源定义无模块?
我试过了,但没有奏效:
namespace :forum do
resources :topics
resources :posts do
resources :comments, controller => 'comments'
end
end
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
好的,我想你想重新使用Comments控制器中的代码。是对的吗?如果是这样,我不知道这个问题的任何直接答案,但我想你可能会考虑这样的事情。
module forum
module posts
class CommentsController < ApplicationController
include Commentable
end
end
end
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