2013-01-10 3 views
0

을 통해 나는 많은에 많은이 : 클래스의 집합 사이의 관계를 통해과 같이 : 사용자는 어느 하나에 한 몫을 가질 수 있도록고유 협회 :

class Company 
    has_many :shares 
    has_many :users, :through => :shares, :uniq => true 
end 

class User 
    has_many :shares 
    has_many :companys, :through => :shares, uniq => true 
end 

class Share 
    belongs_to :company 
    belongs_to :user 
end 

나는 독특한 관계를 확인하려면 회사, "uniq"인수를 사용하여 달성하려고 시도한 것입니다.

처음에는 이것이 작동하고 있다고 생각했지만 "uniq"는 레코드의 SELECT에 필터를 적용하는 것이므로 INSERT가 아닌 것처럼 보이므로 데이터베이스에 중복 레코드가 생겨 문제가됩니다. : share association을 직접 다루기를 원한다면, user.shares를 호출하면 중복 레코드가 존재할 경우이를 반환 할 것이다.

진정한 유니크 관계를 강요하는 접근법을 가진 사람이 있습니까? 그래서 내가 사용자와 회사간에 두 번째 관계를 추가하려고하면 그것을 거부하고 원본 만 유지할 것입니다.

답변

0

Share 클래스에 추가해 보았습니까?

validates_uniqueness_of :user, scope: :company 

또한, 귀하의 User 클래스에서 나는 그것이해야한다고 생각 :

has_many :companies, through: :shares 

나는이 도움이되기를 바랍니다.