我正在尝试将所有用户的角色设置为“user”,但我没有使用过多的控制台或Ruby,这应该从我尝试在下面使用它们的方式清楚。< / p>
我曾希望这样的事情会起作用:
u=User.all
u.role.name="user"
但是,显然,这不起作用,我不知道如何继续。
我正在将CanCan与能力模型一起使用,并通过角色中的“名称”列设置角色名称。用户通过作业有很多角色
user.rb
has_many :assignments
has_many :roles, :through => :assignments
以下是所有设置的方式:
assignment.rb
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # in case of guest
if user.has_role? :admin
can :manage, :all
#else
# can :read, :all
end
end
end
role.rb
class Role < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource, :polymorphic => true
end
角色架构
# == Schema Information
#
# Table name: roles
#
# id :integer not null, primary key
# name :string(255)
# resource_id :integer
# resource_type :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
您能告诉我如何使用控制台为所有用户设置角色名称吗?
答案 0 :(得分:2)
使用update_all
:
role = Role.find_by_name 'user'
User.update_all :role => role
但是,update_all
不会触发ActiveRecord回调,所以如果你需要那些,你需要迭代所有用户:
role = Role.find_by_name 'user'
User.find_each do |user|
user.role = role
user.save
end
User.find_each
批量加载用户,以便在用户数超过1000时最大限度地减少内存使用量。