说,

我们有“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/

10-13 04:53