计数不能用别名选择

时间:2016-10-11 21:07:16

标签: sql ruby-on-rails-4 activerecord

我有一个名为 add_has_relation 的范围 与另一个表进行左连接并使用AS重命名为这样的字段:

scope :add_has_relation, lambda { |fan|
  joins("LEFT JOIN fan_influencers fi ON fi.influencer_id = influencers.id
    AND fi.fan_id = #{fan.id}").select('influencers.*', 'fi.id AS has_relation') if fan.present?
}

如果我使用它,一切都很好,我可以使用该字段的新字段:

  

Influencer.add_has_relation(Fan.find(2))。first.has_relation

但如果我像这样使用COUNT:

  

Influencer.add_has_relation(Fan.find(2))。计数

由于 StatementInvalid 而失败,因为由于某种原因它正在运行此查询:

  

SELECT COUNT(impactrs。*,fi.id AS has_relation)FROM" inf ...

因此我必须像这样使用它:

  

Influencer.add_has_relation(Fan.find(2))图(&安培;:ID)。.Count之间的

但我不认为它很整洁。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

你试过这种方式吗?

val id = """_(\d+)""".r
val ids = map.keys.collect { case id(x) => x }

答案 1 :(得分:0)

您可以在count方法中使用字段参数: Influencer.add_has_relation(Fan.find(2)).count(:id)