Ruby on rails 如何使第一个注册用户成为Rails应用程序的管理员?
我有一个用户模型,我在Rails 5上的应用程序,我正在尝试创建一个自定义回调,允许您将admin角色分配给第一个注册用户,但不幸的是,在将数据保存到数据库时,没有分配该角色。。。请告诉我,怎么了 数据库Ruby on rails 如何使第一个注册用户成为Rails应用程序的管理员?,ruby-on-rails,Ruby On Rails,我有一个用户模型,我在Rails 5上的应用程序,我正在尝试创建一个自定义回调,允许您将admin角色分配给第一个注册用户,但不幸的是,在将数据保存到数据库时,没有分配该角色。。。请告诉我,怎么了 数据库 t.boolean "admin", default: false 模型 class用户堆栈级别太深) 您可以执行以下操作: before_create :set_admin private def set_admin self.admin = true unless User.ex
t.boolean "admin", default: false
模型
class用户
尝试使用
user = User.find(1)
user.admin = true
user.save
我不建议使用回调将第一个注册用户更新为管理员。您可以使用种子,因为它只需要运行一次。尝试使用
user = User.find(1)
user.admin = true
user.save
我不建议使用回调将第一个注册用户更新为管理员。您可以使用seed,因为它只需要运行一次。您需要在创建
回调之前使用,该回调将admin
设置为true
(但不保存!它将在再次保存回调之前触发,以此类推=>堆栈级别太深)
您可以执行以下操作:
before_create :set_admin
private
def set_admin
self.admin = true unless User.exists? # faster than a count
end
或者另一个版本,在保存后使用回调:
after_create :update_admin
private
def update_admin
self.update_attributes!(admin: true) if User.count == 1
end
这两种解决方案的缺点是,每次创建用户时,这些回调都会触发SQL计数。您希望在创建之前有一个回调,该回调将admin
设置为true
(但不保存!它会在保存之前再次触发回调,以此类推=>堆栈级别太深)
您可以执行以下操作:
before_create :set_admin
private
def set_admin
self.admin = true unless User.exists? # faster than a count
end
或者另一个版本,在保存后使用回调:
after_create :update_admin
private
def update_admin
self.update_attributes!(admin: true) if User.count == 1
end
这两种解决方案的缺点是,每次创建用户时,这些回调都会触发SQL计数。您应该使用find方法,而不是count方法User.find(1)。更新属性(admin:true)
。但我认为您只想在rails控制台上执行一次,而不是每次保存用户时执行一次<代码>=>#
验证是否失败?检查user.errors.messages
以查看错误(如果user
是第一个update\u属性失败的用户)。您应该使用查找方法,而不是计数User.find(1)。更新属性(admin:true)
。但我认为您只想在rails控制台上执行一次,而不是每次保存用户时执行一次<代码>=>#
验证是否失败?检查user.errors.messages
以查看错误(如果user
是第一个更新属性失败的用户)。非常感谢!我用了第二个选项!非常感谢你!我用了第二个选项!为了清楚起见:您应该在rails控制台中运行它,也许您的第一个/唯一的用户没有id=1?因此,请尝试user=user.first
,因为第一行应该可以工作。我更喜欢这种“手动方法”而不是回调,因为本质上应该是一种例外情况(例如,确保您是管理员),为了清楚起见:您应该在rails控制台中运行它,并且您的第一个/唯一的用户可能没有id=1?因此,请尝试user=user.first
,因为第一行应该可以工作。我更喜欢这种“手动方法”而不是回调,因为本质上应该是例外情况(例如,确保您是管理员)