여러 속성의 고유성에 대한 3 가지 검증


177

Rails 3.0.0.beta4를 사용합니다

나는의 몇 가지 경우에 내 모델이 유효한 수단을 것을 것을,이 개 속성에 고유성에 대한 유효성 검사를 추가 할 'recorded_at'과가 'zipcode'유일하다.

하나의 속성에는 다음과 같은 구문이 있습니다.

validates :zipcode, :uniqueness => true

감사

답변:


333

Rails 2에서는 다음과 같이 작성했을 것입니다.

validates_uniqueness_of :zipcode, :scope => :recorded_at

레일즈 3에서 :

validates :zipcode, :uniqueness => {:scope => :recorded_at}

여러 속성의 경우 :

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

7
논리적으로 recorded_at우편 번호 범위 내에서 고유 해야한다고 말하는 것이 더 합리적이라고 말하고 싶습니다 . validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan

2
여전히 Rails를 양방향으로 수행 할 수 있으며 동일한 속성에서 여러 유형의 유효성 검사를 수행하지 않는 한 더 읽기 쉽습니다.
zem

24
세 그룹을 확인 validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}하시겠습니까?
Greg Guida

5
난 당신이 사용하려는 경우 것을 추가 할 수 :scope외래 키에, 당신이 사용해야하는 :fkey_id대신, 문자 :fkey는 "기본"이 경우에도, 사람 :uniqueness에서 작동:fkey
nbarraille

1
다음과 같은 사용자 정의 오류 메시지를 추가하고 싶을 것입니다., :message => ' is taken for this recorded date'
laffuste

96

다중 범위 매개 변수 :

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

이것은 Greg의 질문에 답해야합니다.


Greg는 '유효성 검사'바로 가기를 사용하는 데 더 관심이있는 것처럼 보였으므로 그의 질문에 대한 더 빠른 대답은 "예"입니다.
elc

이것은 아는 것이 중요합니다. 범위에서 연결을 확인할 때 _id (또는 사용하지 않아야 함)를 사용해야하는 경우 이것을 정확하게 찾고있었습니다.
프란체스코 Belladonna

이 답변은 Rails 4.1.6에서 작동합니다. validates_uniqueness_of : cart_id, 범위 : [: location_id, : plug_id]
Conor

6

나를 위해 일하지 말고 범위복수 해야합니다.

validates_uniqueness_of : teacher_id, : scope s => [: semester_id, : class_id]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.