2017-12-14 11 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

코드에서 어딘가에 동일한 역할을 두 번 프로젝트에 추가하기 때문에 오류 메시지가 발생합니다. 줄 "validates_uniqueness_of :role_id, scope: :project_id"은 동일한 역할 ID를 두 번 이상 주어진 프로젝트에 붙일 수 없다는 것을 의미합니다.

중복 할당이 어디에서 발생하는지는 까다 롭습니다. 나는 subscription.roles이 어떻게 생성되는지 모르지만 때로는 중복 값을 반환 할 수 있습니다. 일어날 수있는 부분을 찾으려면 전체 코드 기반을 살펴 봐야합니다.