Ant*_*nAL 3 activerecord ruby-on-rails find has-and-belongs-to-many
说,
我们有一个"人"和"喜欢"的模特.
"喜欢"是这个人喜欢的:"音乐","视频","运动","互联网","旅行"等.
"人"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}")
Run Code Online (Sandbox Code Playgroud)
你需要这样的东西来找到所有喜欢的人,而不是任何喜欢的组合.这是基于这样的假设,即您拥有一组喜欢的对象,而不是字符串集合.
Rails 4兼容解决方案:
@people = Person.joins(:favourites)
.where(favourites: { id: @array_of_favourites })
.group("people.id")
.having("count(favourites.id) = #{@array_of_favourites.count}")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
964 次 |
| 最近记录: |