说,
我们有一个“人物”和“最喜欢的”模特。
“最爱”是这个人喜欢的:“音乐”,“视频”,“运动”,“互联网”,“旅行”等。
“人”HABTM“收藏夹”和“最喜欢的”HABTM“人物”
我需要找一个人,其中列出了所有“收藏夹。例如,找一个喜欢”音乐“,”旅行“和”运动“的人。
如何使用ActiveRecord.find方法完成它?
答案 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}")