如何让第一个用户成为Devise gem的管理员?

我想让第一个用户成为管理员。

所以我有字符串属性管理员,我需要在filter或覆盖Devise注册控制器之前做一些。 就像是:

if User.first? User.admin = "admin" User.save end 

这是设计注册行动

  def new resource = build_resource({}) respond_with resource end 

有什么比这更好的方法呢?

假设您的代码没有经常运行(仅在第一次在生产环境中运行您的应用程序时),我只需编写一个Rake任务,为您执行此操作,而不是使应用程序代码混乱。

把它放在你的Rakefile

 task :promote_admin => :environment do User.first.update_attribute('admin', 'admin') end 

这样,您可以保持代码清洁,同时仍然可以在安装过程中轻松地推广第一个用户。

如果您想宣传第一个用户,只需从控制台运行rake promote_admin ,第一个用户将被提升为admin。

它不适合我,我不得不改变它有点像这样:

 class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable after_create :set_admin private def set_admin if User.count == 1 User.first.update_attribute(:admin, true) else return true end end end 

更好的方法是将admin字段设置为boolean 。 并将以下before_filter添加到模型中。

 class User < ActiveRecord::Base before_save :set_admin private def set_admin self.admin = User.count == 0 end end 

为了使其完美运行,您可以在迁移文件中包含以下内容

 create_table(:users) do |t| t.boolean :admin, null: false, default: false ... end 

这将使第一个用户成为管理员。 此外,当您删除所有用户然后新用户注册时,此新用户将是admin。