如何在has_many中通过控制台通过关系向用户分配角色?

时间:2019-04-22 20:30:23

标签: ruby-on-rails

我有2个模型 User Role ,并且has_many:通过它们之间的关系

class User < ApplicationRecord
  has_many    :user_roles,             
  has_many    :roles,  through: :user_roles
end

class Role < ApplicationRecord
  has_many    :user_roles, 
  has_many    :users, :through => :user_roles
end

并关联模型

class UserRole < ApplicationRecord
  belongs_to :user
  belongs_to :role
end

问题是如何通过控制台将角色分配给特定用户。我尝试过

>User.last.roles = [:admin] (Role which I want to assign has name: admin and role_id: 1)

但出现错误

  

ActiveRecord :: AssociationTypeMismatch(预期角色(#47275896707120),得到了:admin,它是Symbol(#47275846312980)的实例)

2 个答案:

答案 0 :(得分:1)

您只需要传递一个Role实例:

admin_role = Role.find(...)
User.last.roles = [admin_role]

答案 1 :(得分:1)

传递角色实例:

User.last.roles << Role.find_by(name: :admin)

您还希望使用<<(铲子)运算符添加到关联中,而不是使用将其替换的设置器。