【发布时间】:2017-12-14 19:43:41
【问题描述】:
我们正在通过使用角色的活动记录集合更新项目来为用户访问项目设置角色分配(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
【问题讨论】:
-
您的项目、角色或用户类是否有更多代码。特别是任何与验证相关的代码,例如
validates :some_property, ... -
类分配具有“validates_uniqueness_of :role_id, scope: :project_id”
-
您可能应该编辑您的代码 sn-p 以包含它。这绝对与您的错误有关。您可能还应该包含任何定义“订阅”的代码,因为它可能是相关的,我将在答案中解释更多。
标签: ruby-on-rails ruby activerecord ruby-on-rails-5