2017-12-14 4 views
-1

アクティブレコードのロールを使用してプロジェクトを更新することにより、プロジェクトへのユーザーアクセスのロール割り当て(project_id、role_id)を設定しています。ActiveRecord CollectionまたはArrayでActiveRecord :: RecordInvalidエラーが発生した場合の更新

ただし、たびにエラーが発生していますActiveRecord :: RecordInvalid - 検証に失敗しました:ロールはすでに取得済みです

私の理解では、私たちは自動的に私たちの割り当ての削除と作成を処理します。このエラーを引き起こして何か間違っているのですか?

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

プロジェクト、ロール、またはユーザークラスのコードがさらにありますか。特に 'validates:some_property、... 'のような検証関連のコード – AndrewSwerlick

+0

クラスの割り当てには「validates_uniqueness_of:role_id、scope::project_id」があります –

+0

あなたのコードスニペットを編集する必要があります。それは間違いなく間違いなく重要です。おそらく関連する可能性のある「サブスクリプション」を定義するコードを含める必要があります。 – AndrewSwerlick

答えて

0

コードのどこかに同じロールをプロジェクトに2回追加しているため、このエラーメッセージが表示されています。行"validates_uniqueness_of :role_id, scope: :project_id"は、同じロールIDを与えられたプロジェクトに複数回アタッチすることはできません。

重複割り当てがどこで起こっているかは、難解です。 subscription.rolesがどのように作成されるのか分かりませんが、重複した値を返すことがあります。それが起こっている可能性がある場所を見つけるために、コードベース全体を調べなければなりません。

関連する問題