У меня есть система, настроенная с использованием devise и rolify для управления пользователями, однако мне нужно создать метод, в котором я могу сделать что-то вроде следующего:
[14] pry(main)> User.create_owner(username:"test", name:"Testing", password:"Password-1", password_confirmation:"Password-1", email: 'testing@hey.com')
который создает пользователя и дает ему все роли, которые у меня есть в системе.
Пока у меня есть следующее
def self.create_owner(options)
user = self.new(options)
@roles.each do |role, user|
user.add_role?(role[:name])
end
user.has_role? :default
user.save
end
но это то, что я получаю
NoMethodError: undefined method `each' for nil:NilClass
from /home/ben/code/BusinessCloudEssential/app/models/user.rb:291:in `create_owner'
Все роли были созданы с использованием исходного файла и находятся в базе данных в соответствии с документами Rolify.
РЕДАКТИРОВАТЬ ОК, теперь у меня есть следующее
def self.create_owner(options)
user = self.new(options)
Role.all.each do
user.roles = Role.all
end
user.has_role? :default
user.save
end
и следующий вывод
[1] pry(main)> User.create_owner(username:"test", name:"testing", password:"Password-1", password_confirmation:"Password-1", email: 'testing@hey.com')
Role Load (2.6ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.5ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.5ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.6ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.2ms) SELECT `roles`.* FROM `roles`
Role Load (0.2ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.2ms) SELECT `roles`.* FROM `roles`
Role Load (0.2ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.8ms) SELECT `roles`.* FROM `roles`
Role Load (0.6ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.4ms) SELECT `roles`.* FROM `roles`
Role Load (0.9ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
Role Load (0.3ms) SELECT `roles`.* FROM `roles`
TRANSACTION (0.5ms) BEGIN
User Exists? (0.7ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'ben.bagley1@hey.com' LIMIT 1
User Exists? (0.8ms) SELECT 1 AS one FROM `users` WHERE `users`.`username` = 'ben1' LIMIT 1
User Exists? (0.5ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'ben.bagley1@hey.com' LIMIT 1
(0.4ms) SELECT COUNT(*) FROM `users`
Setting Load (1.2ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'number_of_users' LIMIT 1
Setting Load (0.4ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'number_of_users' LIMIT 1
TRANSACTION (0.5ms) ROLLBACK
TypeError: compared with non class/module
from /home/ben/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activerecord-6.1.3.2/lib/active_record/relation/delegation.rb:108:in `>='
TypeError: compared with non class/module
from /home/ben/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activerecord-6.1.3.2/lib/active_record/relation
@rolls
не установлено, возможно, вы искалиRole.all
? при этом 1) должно бытьadd_role?
add_role
2) не будет лиuser.roles= Role.all
работать?Я обновлю код @engineersmnky, теперь я получаю
TypeError: compared with non class/module
Обновлено @engineersmnky
Я не имел в виду оба. Либо
Role.all.each {|role| user.add_role(role)}
, либоuser.roles = Rolls.all
(в чем я не был уверен). Также эта строкаuser.has_role? :default
ничего не делает