Требуется обратный вызов before_create
, который установит admin
на true
(но не сохранит! Он снова вызовет обратный вызов before_save
и т. Д. => Уровень стека слишком глубокий).
Вы можете сделать следующее:
before_create :set_admin
private
def set_admin
self.admin = true unless User.exists? # faster than a count
end
или альтернативную версию с обратным вызовом after_save
:
after_create :update_admin
private
def update_admin
self.update_attributes!(admin: true) if User.count == 1
end
Недостатком обоих решений является то, чтоэти обратные вызовы будут вызывать счетчик SQL каждый раз, когда вы создаете пользователя.