[ruby-on-rails] Rails : 두 열의 고유성 확인 (함께)

및 기둥 이있는 Release모델이 있습니다. 동일한 / 조합 을 공유 해서는 안됩니다 .mediumcountryreleasesmediumcountry

이것을 레일 유효성 검사로 어떻게 작성합니까?



답변

옵션 과 함께 고유성 유효성 검사를 사용할 수 있습니다 scope.

또한 작성하기 전에 동시에 검사 할 때 새 레코드가 유효성 검사를 통과하지 못하도록 DB에 고유 인덱스를 추가해야합니다.

class AddUniqueIndexToReleases < ActiveRecord::Migration
  def change
    add_index :releases, [:country, :medium], unique: true
  end
end



class Release < ActiveRecord::Base
  validates :country, uniqueness: { scope: :medium }
end


답변

위의 모든 답변에는 모델에서 여러 속성의 고유성을 확인하는 방법이 없습니다. 아래 코드는 범위에서 여러 속성을 사용하는 방법을 알려줍니다.

validates :country, uniqueness: { scope: [:medium, :another_medium] }

country값이있는 모든 행에서의 고유성을 확인합니다 . mediumanother_medium

참고 : 위 열에 인덱스를 추가하는 것을 잊지 마십시오. 이렇게하면 빠른 검색이 보장되고 고유 레코드에 대한 DB 수준 유효성 검사가 추가됩니다.

업데이트 : 테이블 생성 중 인덱스 추가

t.index [:medium, :another_medium], unique: true


답변

:scope다음과 같이 유효성 검사기에 매개 변수를 전달할 수 있습니다 .

validates_uniqueness_of :medium, scope: :country

더 많은 예제 는 설명서 를 참조하십시오 .


답변