2013-11-01 75 views
0

我目前正在創建一個包含3個主要資源的應用程序::products,:contacts:items。 訪問者只能使用公共RESTful方法(如indexshow)訪問它們。Rails避免重複控制器(DRY)

另一方面,登錄用戶可以訪問任何RESTFul操作。問題在於,對於indexshow的看法取決於訪問者或用戶是不同的。

我的問題是,實際上我正在考慮將我的控制器複製到僅與登錄用戶相關的命名空間user中。我知道這不是一個好主意,因爲它根本不是乾的。

我應該怎麼做才能讓單個控制器實現這一目標?或者圍繞它的最佳實踐是什麼?

非常感謝

+0

我建議設計:http://stackoverflow.com/questions/4769402/devise-action-filter-for-actions-that-require-authentication。你能否詳細說明這個問題:「問題是,索引和展示的觀點根據訪問者或用戶的不同而不同。」這些行爲應該以何種方式改變? –

+0

你可以使你的內容有條件的,意味着如果用戶登錄然後顯示這個內容,如果沒有登錄,那麼只顯示這個內容...所以它很容易綁定你的內容與相同視圖(頁面)上的條件。 –

回答

0

如果有之間只有微小的差別是什麼一個登錄和非登錄用戶可以看到的,只是把一些條件,您的看法:

<% if logged_in %> 
    <p>You are logged in!</p> 
<% else %> 
    <p>You're not logged in.</p> 
<% end %> 

如果差異是主要的,你可能想創建兩個單獨的視圖(例如/contacts/index.html.erb/contacts/public_index.html.erb),一個用於用戶登錄,一個用於非登錄,然後將邏輯控制器:

def index 

    ... your logic goes here 

    if logged_in 
    render 'index' 
    else 
    render 'public_index' 
    end 
end 

顯然你的實現將有所不同,這取決於你的登錄系統是如何實現的,但這是它的要點。

PS我在上面推薦了使用Devise而不是試圖推出自己的登錄系統的建議。