我正在使用带有设计宝石的rails 4并遵循这篇文章 - “https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role”,我也为admin创建了一个模型。现在我有管理员和用户模型。如何在application_helper中获取current_admin,它们存在: -
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
请帮助主要管理员会话。提前致谢
答案 0 :(得分:3)
Devise的current_X辅助方法定义如下:
def current_#{mapping}
@current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
其中mapping是角色类型。 *
因此,您应该能够使用以下方式访问当前的管理员:
current_admin
如果这不起作用,我建议检查以确保在管理模型上正确设置了设备,如下所示:
class Admin < ActiveRecord::Base
devise :database_authenticatable # additional attributes, i.e. :trackable, :lockable
end
*来源:https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb
的第106行<小时/> 如果您仍然遇到此问题,可能值得重新考虑您是否需要将管理员和用户分开使用不同的模型,而不是通过向用户添加管理属性来简化模型和实现模型。
<小时/> 修改强>
SELECT * FROM `users` WHERE isAdmin = 1
结果:
Showing rows 0 - 1 (2 total, Query took 0.0004 seconds.)
使用SQL查询(从Admin表中选择Admins):
SELECT * FROM `administrators`
结果:
Showing rows 0 - 16 (17 total, Query took 0.0003 seconds.)
这绝不是一个非常彻底的例子 - 它只是提供一个关于这样使用时的最小差异的想法。活动记录可能会稍微快一点,但我无法想象它与上述结果会有太大不同。
就个人而言,我发现更容易添加“isAdmin”#39; (或类似)属性到我的用户模型,如下所示:
Active Record migration(db \ migrate \ TIMESTAMP_create_users.rb)
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :username
t.boolean :isAdmin, default: false
...
end
end
end
然后在用户和管理员之间进行过滤,如下所示:
用户,管理员除外
users = User.where(:isAdmin => false)
所有用户
allUsers = User.all
仅限管理员
admins = User.where(:isAdmin => true)