查找具有所有关联记录的记录

时间:2010-08-05 15:41:07

标签: ruby-on-rails activerecord find has-and-belongs-to-many

说,

我们有一个“人物”和“最喜欢的”模特。

“最爱”是这个人喜欢的:“音乐”,“视频”,“运动”,“互联网”,“旅行”等。

“人”HABTM“收藏夹”和“最喜欢的”HABTM“人物”

我需要找一个人,其中列出了所有“收藏夹。例如,找一个喜欢”音乐“,”旅行“和”运动“的人。

如何使用ActiveRecord.find方法完成它?

1 个答案:

答案 0 :(得分: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}")

您需要这样的内容才能找到所有收藏夹的人,而不是 收藏夹的任意组合。这是基于这样的假设,即您拥有一组喜欢的对象,而不是一组字符串。

Rails 4兼容解决方案:

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