[RUBY-ON-RAILS] 여러 열 유효성 검사 고유성
RUBY-ON-RAILS여러 열 유효성 검사 고유성
실제 기록은 단지 열 고유하고하지 않는 것이 확인 할 수있는 레일 웨이 방법이 있습니까? 예를 들어, 우정 모델 / 테이블처럼 여러 개의 동일한 기록을 할 수 없게한다 :
user_id: 10 | friend_id: 20
user_id: 10 | friend_id: 20
해결법
-
==============================
1.당신은 범위가 validates_uniqueness_of 호출로 다음 수 있습니다.
당신은 범위가 validates_uniqueness_of 호출로 다음 수 있습니다.
validates_uniqueness_of :user_id, :scope => :friend_id
-
==============================
2.당신은 하나 개의 컬럼에 고유성 유효성을 검사하는 유효성을 확인하고 사용할 수 있습니다 :
당신은 하나 개의 컬럼에 고유성 유효성을 검사하는 유효성을 확인하고 사용할 수 있습니다 :
validates :user_id, uniqueness: {scope: :friend_id}
여러 열에서 유효성 검사에 대한 구문은 비슷하지만, 당신은 필드의 배열을 대신 제공해야한다 :
validates :attr, uniqueness: {scope: [:attr1, ... , :attrn]}
그러나 검증은 위의 경쟁 조건을 가지고 일관성을 보장 할 수 없습니다 같이 접근한다. 다음 예를 살펴 보겠습니다 :
행동의이 종류를 방지하기 위해, 하나는 DB 테이블에 고유 제한 조건을 추가해야합니다. 당신은 하나 (또는 복수) 필드 (들) 다음 마이그레이션을 실행하여 대한 add_index 등 도우미로 설정할 수 있습니다 :
class AddUniqueConstraints < ActiveRecord::Migration def change add_index :table_name, [:field1, ... , :fieldn], unique: true end end
경고 : 당신이 고유 제한 조건을 설정 한 후에도 두 개 이상의 동시 요청이 DB에 동일한 데이터를 작성하려고하지만, 대신에 중복 레코드를 만드는이는 액티브 :: RecordNotUnique 예외를 올릴 것이다, 별도로 처리해야한다 :
begin # writing to database rescue ActiveRecord::RecordNotUnique => e # handling the case when record already exists end
-
==============================
3.이것은 두 개의 열에서 데이터베이스 제약 수행 할 수 있습니다 :
이것은 두 개의 열에서 데이터베이스 제약 수행 할 수 있습니다 :
add_index 등 : 우정, [: USER_ID : friend_id], 독특한 : 사실
당신은 레일 유효성 검사기를 사용할 수 있지만 일반적으로 나는 데이터베이스 제약 조건을 사용하는 것이 좋습니다.
더 읽기 : https://robots.thoughtbot.com/validation-database-constraint-or-both
from https://stackoverflow.com/questions/4870961/validate-uniqueness-of-multiple-columns by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 세션 현재의 관행을 레일 (0) | 2020.02.09 |
---|---|
[RUBY-ON-RAILS] 레일 : 폰트가 최고 사용 (0) | 2020.02.09 |
[RUBY-ON-RAILS] 액션 당 레이아웃 레일? (0) | 2020.02.09 |
[RUBY-ON-RAILS] 레일에서, 당신은 어떻게 뷰를 사용하여 JSON 렌더링합니까? (0) | 2020.02.09 |
[RUBY-ON-RAILS] 다른 컨트롤러 내의 고안 양식 (0) | 2020.02.09 |