Назначение ролей для разработки пользователя при регистрации в Rolify

я работаю над системой, которая требует администратора и обычного пользователя, я пытаюсь внедрить систему, используя devise, rolify и cancancan. Моя проблема в том, что я хочу добавить роль администратора первому пользователю, который регистрируется в системе, но так пока я могу сделать это только через консоль rails, я также переопределил контроллер регистрации. ниже то, что я пробовал до сих пор.

Пользователь.rb

class User < ApplicationRecord
resourcify
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :invitable, :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

роль.rb

class Role < ApplicationRecord

has_and_belongs_to_many :users, :join_table => :users_roles

belongs_to :resource,
       :polymorphic => true,
       :optional => true

validates :resource_type,
      :inclusion => { :in => Rolify.resource_types },
      :allow_nil => true

scopify
end

Контроллер регистраций

   class RegistrationsController <   Devise::RegistrationsController

   def create
   super
   @number_of_users = User.all.count
    if @number_of_users == 0
    resource.add_role :admin
  end
  end


  end

person chrisgeeq    schedule 13.06.2018    source источник


Ответы (2)


Мне удалось заставить его работать, для тех, кто может столкнуться с такой проблемой в будущем, вот мое решение

Регистрационный контроллер

   after_action :assign_role, only:[:create]
    def assign_role
      @number_of_users = User.all.count
      if @number_of_users == 1 
        current_user.add_role :admin
     end
    end
person chrisgeeq    schedule 13.06.2018
comment
Вместо того, чтобы пытаться переопределить контроллер регистрации, приведенный выше код можно добавить в контроллер приложений. - person chrisgeeq; 13.06.2018

Мне нравится принятое решение, но чтобы все было организовано, я бы поместил его в пользовательскую модель следующим образом:

after_create :assign_role
def assign_role
  if User.all.count == 1 
    User.first.add_role :admin
  end
end
person AFOC    schedule 21.10.2019