11

Active Admin是用于在您的应用程序中拥有管理仪表板的 gem。它使用 Devise 来登录用户并为管理员创建一个单独的admin_user模型。我的应用程序已经使用设计并将其用户作为user模型。自从我开始使用活动管理 gem 以来,在我的路由文件中,即使我的用户已登录,以下行也一直解析为 home#index 而不是 users#dashboard。这曾经在登录用户被带到用户之前正常工作#dashboard 作为根 url。

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'

发生的事情是.authenticate?正在检查admin_user(属于 Active Admin)是否已登录,但不是我user需要检查的模型,因此当我登录到活动管理界面时,我的站点根目录成为用户#dashboard 而不是检查是否user已登录。如何.authenticate?检查是否user已登录admin_user

任何帮助或线索将不胜感激

4

4 回答 4

20

我能够解决这个问题。该问题与 Devise 期望应用程序中的单个用户模型有关。这是修复它的方法。

config/initializers/devise.rb文件中,添加:

config.scoped_views = true

config.default_scope = :user #or whichever is your regular default user model

就是这样,监狱长检查 :user 是否已登录,而不是 :admin_user

于 2011-10-04T07:26:06.143 回答
1

你为什么使用get "/"? 你应该删除它。我使用的定义与您的定义非常相似,并且适用于我。仅使用:

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'
于 2011-10-03T19:28:20.140 回答
1

我不确定,但你可以尝试类似

root :to => proc { |env| [ 302, {'Location'=> env["warden"].authenticate? ? "users/dashboard" : "/home" }, [] ] }
于 2011-10-03T19:28:36.020 回答
0

对我有用的是:

constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.instance_of?(AdminUser) }
于 2012-10-05T14:55:17.150 回答