我们通过使用活动记录角色集合更新项目,为用户访问项目设置角色分配(project_id,role_id)。
但每隔一段时间我们就会收到一条错误,指出 ActiveRecord :: RecordInvalid - 验证失败:已经采取了角色。
我的理解是Rails会自动为我们处理删除和创建作业。我做错了导致这个错误吗?
Class Project
has_many :assigned_roles, source: :role, through: :assignments
....
def assign_users(user_ids = :all)
if user_ids == :all
roles = subscription.roles
else
roles = subscription.roles.where(user_id: user_ids)
end
update!(assigned_roles: roles)
end
答案 0 :(得分:0)
发生了错误消息,因为您在代码中的某个位置向项目添加了两次相同的角色。第"validates_uniqueness_of :role_id, scope: :project_id"
行意味着您不能多次为给定项目添加相同的角色ID。
至于重复作业发生的地方,这很棘手。我不知道如何创建subscription.roles
,但有时可能会返回重复值。您必须查看整个代码库以找到可能发生的位置。