ruby-on-rails – 在活动记录中使用arel的关系计数

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在活动记录中使用arel的关系计数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常艰难的时间来确定如何执行此查询以及其他类似于活动记录中的arel.
select users.id,users.name,maps.count as map_count,from users
  left join (select user_id,count(map_id) as count from maps_users group by user_id) maps on users.id = maps.user_id

从表面上看,它看起来就像Nik的例子(http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/):

photo_counts = photos.
group(photos[:user_id]).
project(photos[:user_id],photos[:id].count)

users.join(photo_counts).on(users[:id].eq(photo_counts[:user_id]))

但是我不能让它在使用活动记录的rails中工作.我认为等效应该是这样的,但它出错了:(

maps = Map.arel_table
  map_counts = Map.group(maps[:owner_id]).
                   select(maps[:owner_id]).
                   select(maps[:id].count.as("map_count"))
  users = User.joins(map_counts).on(User.arel_table[:id].eq(map_counts[:map_count]))

关于如何做的任何想法?

解决方法

首先用项目替换select.在关系代数中,SELECT(限制)是WHERE子句.

其次,您可以进行子选择.

sub_restriction = b.
                   where( b[:domain].eq(1) ).
                   project( b[:domain] )

restriction = a.
               where( a[:domain].in sub_restriction )

完成“子选择”! 原文链接:https://www.f2er.com/ruby/269623.html

猜你在找的Ruby相关文章