使用控制台为所有用户设置角色

时间:2012-11-11 18:04:32

标签: ruby ruby-on-rails-3 console cancan

我正在尝试将所有用户的角色设置为“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
  #

您能告诉我如何使用控制台为所有用户设置角色名称吗?

1 个答案:

答案 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时最大限度地减少内存使用量。