说,
我们有“Person”和“Favorite”模型。
“最喜欢的”是这个人喜欢的东西:“音乐”、“视频”、“运动”、“互联网”、“旅行”等。
“人” HABTM“收藏夹”和“收藏夹”HABTM“人”
我需要找到一个人,该人已全部列出“收藏夹”。例如,找到一个喜欢“音乐”、“旅行”和“运动”的人。
如何使用 ActiveRecord.find 方法完成?
最佳答案
@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}")
关于ruby-on-rails - 查找具有所有关联记录的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3416451/