Rails : 3 개 열의 고유 한 조합 확인
안녕하세요, 내 테이블에서 3 개 열의 고유 한 조합을 확인하고 싶지 않습니다.
: brand, : model_name 및 : fuel_type 값을 가진 cars라는 테이블이 있다고 가정 해 보겠습니다.
내가 원하는 것은 레코드가 이들 3의 조합을 기반으로 고유한지 확인하는 것입니다. 예 :
brand model_name fuel_type
Audi A4 Gas
Audi A4 Diesel
Audi A6 Gas
모두 유효해야합니다. 그러나 'Audi, A6, Gas'가 포함 된 다른 레코드는 유효하지 않아야합니다.
이 유효성 검사에 대해 알고 있지만 실제로 내가 원하는 것을 수행하는지 의심됩니다.
validates_uniqueness_of :brand, :scope => {:model_name, :fuel_type}
코드 조각에 구문 오류가 있습니다. 올바른 유효성 검사는 다음과 같습니다.
validates_uniqueness_of :car_model_name, :scope => [:brand_id, :fuel_type_id]
또는 루비 1.9.x에서는 더 짧습니다.
validates_uniqueness_of :car_model_name, scope: [:brand_id, :fuel_type_id]
와 4 레일 당신은 사용할 수 있습니다 :
validates :car_model_name, uniqueness: { scope: [:brand_id, :fuel_type_id] }
와 5 레일 당신은 사용할 수 있습니다
validates_uniqueness_of :car_model_name, scope: %i[brand_id fuel_type_id]
필요에 따라 모델 유효성 검사 대신 제약 조건을 추가 할 수도 있습니다 (테이블 생성 마이그레이션의 일부로 또는 별도의 항목으로).
add_index :the_table_name, [:brand, :model_name, :fuel_type], :unique => true
여러 데이터베이스 연결이 동시에 쓰기 작업을 수행하는 경우 데이터베이스 수준에 고유 제약 조건을 추가하는 것이 좋습니다.
나는 이렇게 만들 것이다 :
validates_uniqueness_of :model_name, :scope => {:brand_id, :fuel_type_id}
나에게 더 의미가 있기 때문입니다.
- "브랜드"와 "연료 유형"의 조합에 대해 중복 된 "모델 이름"이 있어서는 안됩니다.
- "모델명"과 "연료 유형"의 조합에 대해 중복 된 "브랜드"가 없어야합니다.
그러나 그것은 주관적인 의견입니다.
물론 brand와 fuel_type이 다른 모델과의 관계라면 (그렇지 않다면 "_id"부분을 삭제하십시오). 고유성 유효성 검사를 사용하면 비 DB 열을 확인할 수 없으므로 모델에서 외래 키의 유효성을 검사해야합니다.
어떤 속성의 유효성을 검사할지 정의해야합니다. 한 번에 모두 유효성을 검사하지 않고 원하는 경우 모든 속성에 대해 별도의 유효성 검사를 만들어야하므로 사용자가 실수를하고 중복 된 레코드를 만들려고 할 때 오류를 표시합니다. 잘못된 필드 근처의 양식.
Rails 4에 새로운 해시 패턴이있는 올바른 코드
validates :column_name, uniqueness: {scope: [:brand_id, :fuel_type_id]}
이 유효성 검사 방법을와 함께 사용 ActiveRecord::Validations#save
한다고해서 중복 레코드 삽입이 없음이 보장되지는 않습니다. 응용 프로그램 수준의 고유성 검사는 본질적으로 경쟁 조건에 취약하기 때문입니다.
이는 '직렬화 가능'격리 수준으로 트랜잭션을 사용하는 경우에도 발생할 수 있습니다. 이 문제를 해결하는 가장 좋은 방법은를 사용하여 데이터베이스 테이블에 고유 인덱스를 추가하는 것 ActiveRecord::ConnectionAdapters::SchemaStatements#add_index
입니다. 드물게 경쟁 조건이 발생하는 경우 데이터베이스는 필드의 고유성을 보장합니다.
참고 URL : https://stackoverflow.com/questions/7428872/rails-validate-unique-combination-of-3-columns
'Program Tip' 카테고리의 다른 글
Rails 3 및 Heroku : 푸시시 자동으로 "rake db : migrate"? (0) | 2020.11.30 |
---|---|
Unix 찾기 : 여러 파일 유형 (0) | 2020.11.30 |
요소 ID에 포커스가 있는지 어떻게 확인할 수 있습니까? (0) | 2020.11.30 |
Docker의 기존 명명 된 볼륨에 데이터를 추가하는 올바른 방법은 무엇입니까? (0) | 2020.11.30 |
라 라벨 버전을 아는 방법과 정의 위치 (0) | 2020.11.30 |