2013-03-11 41 views
0

我已經在我的路線文件如下: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 

任何幫助,將不勝感激,謝謝!

+0

實際上rails會尋找/ forum/posts /:post_id/comments/not for/forum/comments/ – 2013-03-11 04:24:29

+0

我的意思是從控制器的角度來看,所以我得到錯誤'ActionController :: RoutingError(未初始化的常量論壇:: CommentsController)' – yorch 2013-03-11 04:28:52

+0

控制器是多態的?沒有得到這一點。 – HungryCoder 2013-03-11 04:32:53

回答

1

你也可以設置爲手動

評論例如

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

的路線,以便您的評論控制器不必坐在其他模塊內

+0

謝謝,我結束了使用這個答案,這是對其他東西,如路線名稱影響較小的一個。 – yorch 2013-03-11 14:28:03

1

好的,我想你想在評論控制器中重新使用代碼。是對的嗎?如果是這樣,我不知道這個問題有任何直接的答案,但我想你可能會考慮這樣的事情。

comments_controller.rb

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

commentable.rb

module Commentable 

end 

現在你可以使用這個commentable模塊任何你想要使用。因此,您正在重新使用具有兩個功能的通用代碼: 1.您可以自由更改每個控制器的行爲 2.您必須爲每個控制器創建單獨的文件。

+0

有趣的是,它需要更多的返工,所以我結束了使用其他答案,但這絕對是考慮改進我的代碼,謝謝! – yorch 2013-03-11 14:29:20

1

這不是最乾淨(和我不知道是否有更好的方法來實現這一點),但是可以使用範圍而不是命名空間,然後在論壇名稱空間中明確設置控制器以獲取資源:

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

謝謝!我嘗試了你的答案,它確實有效,但路由名稱在論壇上放棄了他們的名字,我依賴這些名稱。 – yorch 2013-03-11 14:27:13