1

가 나는 모델 나는이의 이름 속성이 하나의 범위에 대한 고유해야합니다레일 모델 : 관련 엔티티의 속성에 대한 유효 범위가있는 validates_uniqueness_of를 사용합니까?

class One <Active:Record:Base 
    { 
     has_and_belongs_to_many :twos, {:join_table => 'map__ones__twos'} 
    } 

    class Two <Active:Record:Base 
    { 
     has_and_belongs_to_many :ones, {:join_table => 'map__ones__twos'} 
    } 

다음과 같이 정의했습니다. 즉, 하나에 속한 두 개의 이름 모두 고유 한 이름을 가져야합니다. 여기서는 두 모델에서 아래와 같은 것을 지정할 수 없습니다.

 validates_uniqueness_of :name, :scope => one_id 

왜냐하면 on_id는 2 테이블의 열이 아니기 때문입니다. 오히려 one_id 및 two_id이 테이블을 통해 서로에 매핑되는이

내가 자주 has_and_belongs_to_many를 사용하는 것이보다 가치가 더 문제가 있음을 발견했다

+0

1, 2가되지 않습니다

class One < ActiveRecord::Base has_many :ones_twos, :dependent => :destroy has_many :twos, :through => :ones_twos end 

그리고 당신의 두 모델을 다음과 같습니다 좋은 이름. 귀하의 모범을 더 붉어지는 것으로 바꾸십시오. – tjeden

답변

1

을 제안하십시오 사람 _twos (많은 관계로 많은) map_. 다 대 다 관계가있을 때 조인 테이블을 만들어 모델을 만듭니다. 그런 다음 조인 모델은 두 ID의 고유성에 대한 유효성 검증을 가질 수 있습니다.

죄송합니다. 귀하의 질문에 예제 테이블 이름을 사용하고 있습니다. 귀하의 경우,이 보일 것 같은 :

class MapOnesTwo < ActiveRecord::Base 
    belongs_to :one 
    belongs_to :two 

    validates_presence_of :one_id, :two_id 
    validates_uniqueness_of :one_id, :scope => :two_id 
end 

귀하의 한 모델은 다음과 같습니다

class Two < ActiveRecord::Base 
    has_many :ones_twos, :dependent => :destroy 
    has_many :twos, :through => :ones_twos 
end 
관련 문제