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

问题描述 投票:-1回答:1

我们通过使用活动记录角色集合更新项目来为用户访问项目设置角色分配(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
ruby-on-rails ruby activerecord ruby-on-rails-5
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.