2014-09-13 98 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

相关问题