2016-06-27 3 views
0

나는 나의 API 응용 프로그램의 다음 구조를 가지고? 내가 작성하는 경우 :사용자가 앱간에 이메일을 가질 수 있도록 허용하려면 하나의 앱 안에 이메일을 저장할 수 없습니까?</p> <pre><code>class App < ActiveRecord::Base has_many :users end class User < ActiveRecord::Base belongs_to :app end </code></pre> <p>가 어떻게 사용자가 응용 프로그램 사이의 동일한 고유 이메일을 가질 수 있도록,하지만 하나의 응용 프로그램 내부 않습니다

class User < ActiveRecord::Base 
    belongs_to :app 
    validates :email, uniquiness: true 
end 

은 전 세계적으로 모든 사용자들 사이에서 이메일의 고유성을 확인합니다,하지만 난 단지 사용자가 속한 특정 응용 프로그램 모델의 사용자들 사이의 유효성을 검사합니다.

validates :email, uniquness: { scope: :app } 

더 :

다른 단어, 나는 사용자가이 유효성 검사를 제한하는 범위를 사용하여 ID 2.

답변

2

와 ID 1 및 응용 프로그램과 함께 앱 동일한 이메일에 가입 할 수 있도록하려면 validates에 대한 정보뿐만 아니라 uniquness 옵션은 Rails Validation Documentation

+0

에서 발견 또는'validates_uniqueness_of 사용할 수 있습니다 : 이메일, 범위 : app' 및 [액티브 ::되는 검증 :: ClassMethods 워드 프로세서 (HTTP 읽기 : // API. rubyonrails.org/classes/ActiveRecord/V alidations/ClassMethods.html # method-i-validates_uniqueness_of) –

+1

'add_index (: users, [: email, : app_id]), unique : true'와 같은 색인을 추가하는 것도 도움이 될 수 있습니다. –

+1

@NicNilov 저는'validates'가 검증을 위해 선호되는 방법이라고 확신합니다. 'validates_uniqueness_of'는 오래된 방법입니다. 'validates_length_of','validates_presence_of' 등에 대해서도 마찬가지입니다. –