我正在使用此查询:
Post.where("created_at >= ? AND created_at <= ?", 1.month.ago.beginning_of_month , 1.month.ago.end_of_month)
.select('DISTINCT user_id')
返回40个元素。但是,我希望从此查询中获取一个数组,并能够使用.each
迭代此数组。问题是当我尝试在查询结果上使用.each
时,我得到了这个:
ActiveRecord :: StatementInvalid:PG :: InvalidColumnReference:ERROR:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中 第1行:... ted_at&lt; =&#39; 2016-06-30 21:59:59.999999&#39;)ORDER BY created_at ... ^ :SELECT DISTINCT user_id FROM&#34; posts&#34; WHERE(created_at&gt; =&#39; 2016-05-31 22:00:00.000000&#39; AND created_at&lt; =&#39; 2016-06-30 21:59:59.999999&#39;)ORDER BY created_at DESC
此查询似乎强制ORDER BY
上的created_at
,并使其中断,因为查询中的order_by不是。
为避免此问题,我使用:
Post.where("created_at >= ? AND created_at <= ?", 1.month.ago.beginning_of_month , 1.month.ago.end_of_month)
.map{|p| p.user_id}.uniq
效率较低。
我知道为什么会收到此错误?
答案 0 :(得分:2)
尝试以下方法:
Post.where(created_at: (1.month.ago.beginning_of_month)..1.month.ago.end_of_month)
.distinct.reorder(nil).pluck(:user_id)
正如评论中所提到的,这是由于default_scope
:
default_scope {order('created_at DESC')}