我有一个用户模型,我的应用程序在Rails 5上,我尝试进行自定义回调,允许您将admin的角色分配给第一个注册用户,但不幸的是,在将数据保存到数据库时,角色没有分配......请告诉我,有什么不对?
数据库
t.boolean "admin", default: false
模型
class User < ApplicationRecord
before_save: update_admin
private
def update_admin
User.count(1).update_attributes (admin: 'true')
end
end
答案 0 :(得分:2)
你想要一个{em}设置 before_create
到admin
的{{1}}回调(但不能保存!它会再次触发true
回调所以on =&gt;堆栈级别太深了。)
您可以执行以下操作:
before_save
或替代版本,带有before_create :set_admin
private
def set_admin
self.admin = true unless User.exists? # faster than a count
end
回调:
after_save
这两种解决方案的缺点是,每次创建用户时,这些回调都会触发SQL计数。