2010-08-05 118 views
2

說,查找記錄,即所有關聯記錄

我們有一個「人」和「收藏」模型。

「收藏」是什麼這個人喜歡:「音樂」,「視頻」,「運動」,「互聯網」,「旅遊」等

「人」 HABTM「收藏夾」和「收藏」 HABTM「人」

,我需要找一個人,已全部上市的「收藏夾。例如,找一個人,一個喜歡‘音樂’,‘旅行’和‘運動’。

它如何使用ActiveRecord.find方法?

回答

5
@people = Person.find(:all, 
    :joins => :favourites, 
    :select => "person.*, count(favourites) favourite_count", 
    :conditions => {:favourites => @array_of_favourites}, 
    :group => "persons.id having favourite_count = #{@array_of_favourites.count}") 

你需要這樣的東西才能找到全部收藏夾而不是收藏夾的任何組合。這是基於假設您擁有一組最喜歡的對象,而不是一組字符串。

導軌4兼容的解決方案:

@people = Person.joins(:favourites) 
    .where(favourites: { id: @array_of_favourites }) 
    .group("people.id") 
    .having("count(favourites.id) = #{@array_of_favourites.count}") 
+0

感謝。好的解決方案 – AntonAL 2010-08-05 18:01:57