我一直致力于使用设计创建两种不同类型的用户,他们有自己独立的视图,因为我需要这样做。除路由部分外,一切都很好,每当我提到用户类型1的路径为/用户类型1 /注册时,它最终以普通用户身份注册。同样从日志中可以清楚地看到默认用户布局被调用。以下是我的路线: -
devise_for :user_type1, :controllers => { :registrations => "user_type1/registrations" }
devise_for :user_type2, :controllers => { :registrations => "user_type2/registrations" }
以下是日志 -
Started GET "/user_type1/sign_up" for 127.0.0.1 at 2014-05-22 11:00:38 +0530
Processing by user_type1::RegistrationsController#new as HTML
(210.0ms) BEGIN
(211.3ms) ROLLBACK
Rendered user_type1/shared/_links.erb (2.0ms)
Rendered user_type1/registrations/new.html.erb within layouts/application (713.3ms)
Rendered devise/sessions/new.html.erb (5.5ms)
Rendered devise/registrations/new.html.erb (107.4ms)
Rendered application/_header-new.html.erb (117.6ms)
我该怎么做,使设计指向特定用户的特定页面。仍在学习设计以及如何解决这个问题,对此提出任何建议或建议都是最受欢迎的。提前谢谢。
答案 0 :(得分:1)
<强>问题强>
您的问题很可能涉及您的应用程序的后端 - 您如何区分user_type1
和user_type2
?
如果你有两种不同的型号 - 为什么?请记住,Rails主要基于DRY编程原则。您希望将所有信息结构化为存储在单个数据表中
因此,我会将所有用户存储在User
模型中,并使用user_type
字段来定义用户类型
-
<强>设置强>
我会这样做:
#config/routes.rb
devise_for :users
这将路由到registrations
和sessions
控制器(适用于所有用户) - 并将使用所有相关方法&amp;对它的依赖。这将使您能够在User
模型中定义用户类型,如下所示:
#app/models/user.rb
Class User < ActiveRecord::Base
before_create :set_user_type
private
def set_user_type
self.type = "type" unless type
end
end
-
<强>重定向强>
我最初将您的问题读作&#34;如何为不同的用户重定向&#34;。显然不是问题;但无论如何,这就是我要做的事情:
不确定它是否对Rails 3
有效,但您可以在设计中使用after_sign_in_path_for
方法:
#app/controllers/application_controller.rb
def after_sign_in_path_for(resource)
# logic here?
end
答案 1 :(得分:0)
听起来你已经回答了,但这是我的$ .02 ......我认为你真的想要扩大你的用户范围。你说,&#34;每当我提到用户类型1的路径为/用户类型1 /注册时,它最终以普通用户身份注册&#34;。通过范围界定,您将执行&#34; / type1 / user_registrations&#34;和&#34; / type2 / user_registrations&#34;。范围指南中有详细记录。
关于范围界定的编辑:
结帐https://github.com/plataformatec/devise#configuring-views。例如,它讨论了管理员和用户之间的范围。引用:
如果您的应用程序中有多个Devise模型(例如 用户和管理员),您会注意到Devise使用相同的视图 适用于所有型号。幸运的是,Devise提供了一种简单的自定义方式 观点。您需要做的就是在内部设置config.scoped_views = true config / initializers / devise.rb文件。
执行此操作后,您将能够根据角色获得视图 users / sessions / new和admins / sessions / new。如果没有找到视图
在范围内,Devise将使用默认视图 设计/会议/新。您也可以使用生成器生成 范围观点:
rails generate devise:views users
您应该阅读本节和下一节&#34; Configuring controllers&#34;。
Devise还有一个广泛的维基here。