2014-09-13 99 views
0

我打算爲不同的用戶類型使用不同子域的應用程序。我將爲每個用戶類型命名空間控制器。現在我想我還需要命名空間以使其正常工作?命名空間名稱空間控制器還有什麼?

如果我命名空間的控制器是這樣的:

app/controllers/student/users_controller.erb 
app/controllers/student/... 
app/controllers/student/... 

那麼我想我還需要命名空間訪問量是這樣的:

app/views/student/homeworks/index.html.erb 
app/views/student/homeworks/... 
app/views/student/homeworks/... 

是否也應該命名空間的助手和我SessionController在那裏我處理用戶登錄?另外,我不認爲我應該命名空間ApplicationController所以我應該如何處理這個問題?

謝謝!

回答

1

沒有看到你的代碼的其餘部分是很難知道你想什麼來實現,但還有很大的Railscasts episode,在Rails的子域,可以幫助您。

命名空間代碼並不是讓代碼正常工作的必要條件,儘管它可以幫助您保持代碼的有序性。下面是一些思考,與子站點時,額外的東西:

路線

... 
match '/' => 'users#show', :contraints => { :subdomain => /.+/ } 
... 

本例使用約束路由所有子域的users#show行動。您可以使用此技術來區分子域,將它們路由到適當的控制器操作。

控制器

一旦你建立了你的路由文件路由子域正確,您可以通過請求檢索任何控制器的子域:

def show 
    @subdomain = request.subdomain 
end 

這將允許您添加子特定於您的應用程序的邏輯。

查看

鏈接到與其他子域的觀點是直線前進,子域中的選項只是傳遞給你的網址方法:

root_url(subdomain: 'student') 
+0

謝謝,但我試圖避免在我的視圖和控制器中有很多'if'語句的情況。我的用戶在查找「家庭作業」的「顯示」視圖時有很多不同的觀點。我將有4種類型的用戶,我不想要混亂的代碼。這就是爲什麼它不會幹燥,但大的優勢將是更簡潔的代碼,更容易維護。我只是不確定如何處理我的問題中的疑慮。 – user3339562 2014-09-13 15:30:42

1

最簡單的方法是使用genarators

rails g controller 'student/users' new create etc. 

rails g controller student::users 

當你要添加另一個控制器:

rails g controller student::classes 

此控制器和視圖自動創建必要的結構。

然後加在你的路線:

namespace :student do 
    resources :users 
    resources :classes 
end 

您可以使用路線傭工像new_student_user_path

對於非命名空間控制器,你通常會輸入的form_for @user創建一個用戶,一個命名空間:

<%= form_for [:student, @user] do |f| %> 
... 

順便說一句,如果用戶的區別只是他們的能力,最好使用像康康舞或declarative_authorization寶石管理授權。 如果您爲每種類型存儲不同的信息,則可以將具有多態關係的單用戶模型創建爲不同的配置文件。 更多信息:

How to model different users in Rails

Rails App with 3 different types of Users

................................ ......

編輯

您可以從application_controller設置佈局。我想在你簽署可以在佈局存儲在cookie或會話哈希:會話[:佈局] =「學生」

layout :set_layout 

def set_layout 
    session[:layout] || 'application' 
end 

或者,如果你有獲取用戶,你可以檢查它的類CURRENT_USER方法並選擇佈局。 我強烈建議您重新考慮拆分用戶類。不同的用戶模型會導致重複的邏輯和複雜的身份驗證。

+0

謝謝,+1 :)。你能否告訴我在這種情況下如何處理佈局?我有我的視圖文件夾中的一個佈局文件夾,我有應用程序視圖中顯示佈局取決於哪個用戶登錄ib。我是否也應該在「學生」命名空間文件夾內創建佈局文件夾?謝謝! – user3339562 2014-09-13 16:56:17

+0

編輯了我的答案 – 2014-09-13 18:55:35

相關問題