2009-07-22 5 views
1

조인 모델을 통해 다 대 다 관계가 설정되었습니다. 본질적으로, 나는 사람들이 활동에 관심을 표명하도록 허용한다.관련없는 레코드를 찾기 위해 ActiveRecord를 어떻게 사용합니까?

class Activity < ActiveRecord::Base 
    has_many :personal_interests 
    has_many :people, :through => :personal_interests 
end 

class Person < ActiveRecord::Base 
    has_many :personal_interests 
    has_many :activities, :through => :personal_interests 
end 

class PersonalInterest < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :activity 
end 

지금 발견 할 : 활동 이 관심을 표명하지 특정 사용자가있는? 여기에는 다른 사람들이 관심을 갖는 활동뿐만 아니라 관심이없는 제로의 활동이 포함되어야합니다.

(Activity.all - this_person.interests).first 

어떻게 깔끔하게 액티브에서이 질의를 표현할 수 있습니다

성공 (그러나 inefficent) 메소드는 두 개의 쿼리를했다? 쿼리를 추상화하는 (신뢰할 수 있고 잘 보관 된) 플러그인이 있습니까?

+0

누구든지 Association Extensions 플러그인 또는 후임자에 대한 의견이있는 경우 특히 관심이 있습니다. (rubyforge.org/projects/assocext) –

답변

1

가장 쉬운 방법은 :conditions 매개 변수를 통해 SQL where 절 조각을 사용하는 것입니다. 예를 들어

: 아마

Activity.all(:conditions => ['not exists (select 1 from personal_interests where person_id = ? and activity_id = activities.id)', this_person.id]) 

완전히 테스트되지 않은, 그리고 정확하게 잘 작동하지 않습니다,하지만 당신은 아이디어를 얻을.

+0

굉장, 내 눈에 잘 맞는다! 아직도, 나는 당신이 SQL을 사용해야한다는 것에 놀랐다. http://rubyforge.org/projects/assocext/가 AR 확장자로 이것을 수행하지만, 3 년 후에는 분명히 다루어지지 않았습니다. –

관련 문제