Как мне сделать первого зарегистрированного пользователя администратором в приложении Rails? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть модель User, мое приложение на Rails 5, и я пытаюсь сделать собственный обратный вызов, который позволяет назначить роль администратора первому зарегистрированному пользователю, но, к сожалению, при сохранении данных в базе данных, Роль не назначена ... Скажите пожалуйста, что не так?

База данных

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

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Требуется обратный вызов 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 каждый раз, когда вы создаете пользователя.

0 голосов
/ 10 мая 2018

попробуйте использовать

user = User.find(1)
user.admin = true
user.save

Я бы не рекомендовал использовать Callback для обновления 1-го зарегистрированного пользователя в качестве администратора. Вы можете использовать семена, так как их нужно запускать только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...