5

我有一个带有 Devise 2.1 的 rails 3.2 应用程序

我有 2 个使用设计的模型(AdminUser 和 User)

楷模:

class AdminUser < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable
end

class User < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

我已经通过设计生成器为两个模型生成了单独的视图。AdminUser 的views/devise 文件夹(在新要求之前几个月实施) 用户模型的views/users 文件夹

注销后,我想重定向到与设计模型匹配的特定操作。下面的代码适用于 application_controller.rb 但它适用于我不想做的两个模型:

def after_sign_out_path_for(user)
  user_landing_path
end

退出任一模型都会重定向到相同的登录页面,但我希望两个设计模型都有一个唯一的目的地。

我怎样才能做到这一点?

4

2 回答 2

10

在查看了这里的一些示例后,我想出了一个解决方案 http://eureka.ykyuen.info/2011/03/10/rails-redirect-previous-page-after-devise-sign-in/

def after_sign_out_path_for(resource_or_scope)
  case resource_or_scope
    when :user, User
      user_landing_path
    when :admin_user, AdminUser
      admin_user_landing_path
    else
      super
  end
end
于 2012-12-28T03:47:51.377 回答
0

你可以做的一些事情:

case user.class
when AdminUser.class
  do_admin_sign_out()
when User.class
  do_user_sign_out()
else
  no_idea_who_you_are()
end

或者

if user.kind_of? AdminUser
  do_admin_thing()
else
  do_user_thing()
end

或者,您可以为两个模型添加一个admin?检查,并检查,即:

if user.admin?
  do_admin_thing()
...

我可能会做后者,因为这可能会出现在其他地方,但这些都是你的选择。

于 2012-12-28T02:00:19.200 回答