不同设计用户的不同注册路线

时间:2014-05-22 05:34:23

标签: ruby-on-rails ruby ruby-on-rails-3 devise ruby-on-rails-3.2

我一直致力于使用设计创建两种不同类型的用户,他们有自己独立的视图,因为我需要这样做。除路由部分外,一切都很好,每当我提到用户类型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)

我该怎么做,使设计指向特定用户的特定页面。仍在学习设计以及如何解决这个问题,对此提出任何建议或建议都是最受欢迎的。提前谢谢。

2 个答案:

答案 0 :(得分:1)

<强>问题

您的问题很可能涉及您的应用程序的后端 - 您如何区分user_type1user_type2

如果你有两种不同的型号 - 为什么?请记住,Rails主要基于DRY编程原则。您希望将所有信息结构化为存储在单个数据表中

因此,我会将所有用户存储在User模型中,并使用user_type字段来定义用户类型

-

<强>设置

我会这样做:

#config/routes.rb
devise_for :users

这将路由到registrationssessions控制器(适用于所有用户) - 并将使用所有相关方法&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