我想让第一个用户成为管理员。
所以我有字符串属性管理员,我需要在过滤或覆盖设计注册控制器之前做一些。就像是:
if User.first?
User.admin = "admin"
User.save
end
这是设计regitration动作
def new
resource = build_resource({})
respond_with resource
end
这样做的更好方法是什么?
我想让第一个用户成为管理员。
所以我有字符串属性管理员,我需要在过滤或覆盖设计注册控制器之前做一些。就像是:
if User.first?
User.admin = "admin"
User.save
end
这是设计regitration动作
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
字段设置为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
这将使第一个用户成为管理员。此外,当您删除所有用户然后新用户注册时,这个新用户将是管理员。
它对我不起作用,我不得不像这样更改它:
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