2013-06-28 83 views
0

顯示同一控制器的不同視圖我爲網站構建了一個管理界面。我有一些具有管理員功能/視圖的控制器,它們也具有面向用戶的視圖。例如,當用戶轉到/博客時,它應該顯示每篇博文的標題,日期,第一段等,並帶有閱讀整篇文章的鏈接。如果管理員轉到管理員/帖子,他們會看到只有博客帖子標題的列表,多少條評論,編輯/刪除鏈接,創建帖子的鏈接等。根據路線

我會如何實現這一目標?我的(簡化的)路線文件是這樣的:

namespace :admin do 
    resources :posts 
end 

我需要單獨的控制器嗎?

回答

2

通常在使用namespaces時,您希望您的代碼也是命名空間。我會爲2個不同的控制器提供2種不同的視圖。

app/controllers/posts_controller.rb 
app/controllers/backend/posts_controller.rb 

app/controllers/posts_controller.rb 
app/controllers/admin_area/posts_controller.rb 

你的想法。我會對意見做同樣的事情。

你的控制器是這樣的:

class PostsController < ApplicationController 
end 

class Backend::PostsController < BackendController 
end 

class BackendController < ApplicationController 
end 
+0

OK我想我明白了。所以我確實需要爲每個部分創建單獨的控制器/視圖。是否有理由不讓客戶端將其部分保留在根名稱空間而不是它自己的名稱空間中?在我看來,因爲路線是/ posts和/ admin/posts,管理員帖子應該在名稱空間中,但是前面的帖子不應該是。 –

+0

是的,你是對的 –

0

有很多方法可以解決這個問題,我不能真正想到其中一個「正確」。爲了簡單起見,我會提供一個快速解決方案,但是,誠然,這是一條捷徑。

假設你有一個登錄用戶轉到這個/ admin路由,並且current_user將被授權爲admin,所以你可以在你的show方法中使用它。

if current_user.admin? 
    render 'admin_show' 
else 
    render 'show' 

您的看法當然會呈現不同的實現。

但是,如果您將在方法的許多方面有所不同,可能值得創建一個新的admin_posts_controller。但是如果只有一些差異,那就足夠好了。

恩,希望有所幫助。