Rails使用ActiveRecord Collection或Array更新,导致ActiveRecord :: RecordInvalid错误

时间:2017-12-14 19:43:41

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

我们通过使用活动记录角色集合更新项目,为用户访问项目设置角色分配(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

1 个答案:

答案 0 :(得分:0)

发生了错误消息,因为您在代码中的某个位置向项目添加了两次相同的角色。第"validates_uniqueness_of :role_id, scope: :project_id"行意味着您不能多次为给定项目添加相同的角色ID。

至于重复作业发生的地方,这很棘手。我不知道如何创建subscription.roles,但有时可能会返回重复值。您必须查看整个代码库以找到可能发生的位置。