我正在尝试从关联中选择一个列的计数,但它似乎不起作用。这是我的代码:
scope :search, lambda { |search, order_syntax| select("*, COUNT(payment_notifications.p_type) AS number_of_objects") { :conditions => ['items.title LIKE ? OR items.desc LIKE ? OR taggings.context LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"], :include => [:taggings, :payment_notifications, :user], :order => 'number_of_objects' } }
我想要达到的目标是: 我想按购买次数订购。所以,让我们说这是我的payment_notifications表:
item_id | P_TYPE
2 | '付款'
2 | '付款'
6 | '付款'
2 | '付款'
3 | '付款'
6 | '付款'
零| '撤回'
订单应该是这样的: 2 6 3
希望你明白。
提前致谢。
答案 0 :(得分:1)
找到我的解决方案。需要使用计数器缓存。谢谢大家!
答案 1 :(得分:0)
您还应该在订单栏中包含itme_id
:order => 'item_id,number_of_objects'
答案 2 :(得分:0)
首先,您应该使用普通方法而不是范围,因为查询相当复杂,结果将完全相同(更容易格式化)。
其次,当你不在任何地方使用它时,我不确定你为什么在lambda中有一个参数“order_syntax”。
这是我建议的(使用新的Active Record链接语法)。我没有对它进行测试,但如果我理解了您的原始查询,它应该可以工作。
def search(term)
select("*, COUNT(payment_notifications.p_type) AS number_of_objects").
where('items.title LIKE ? OR items.desc LIKE ? OR taggings.context LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").
includes(:taggings, :payment_notifications, :user).
order('number_of_objects')
end