Sql 不使用别名选择的计数

Sql 不使用别名选择的计数,sql,ruby-on-rails-4,activerecord,Sql,Ruby On Rails 4,Activerecord,我有一个称为add\u has\u relation的范围 它与另一个表进行左连接,并将重命名为字段,如下所示: 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

我有一个称为add\u has\u relation的范围 它与另一个表进行左连接,并将重命名为字段,如下所示:

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?
}
如果我使用它,一切都很好,我可以使用该字段新字段:

影响者.add\u有\u关系(Fan.find(2)).first.has\u关系

但如果我使用这样的计数:

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?
}
影响者.add\u具有\u关系(Fan.find(2)).count

由于某种原因,它正在运行此查询,因此失败,语句无效:

从“inf…”中选择计数(影响者。*,fi.id作为有关系)

所以我必须这样使用它:

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?
}
影响者.add_有关系(Fan.find(2)).map(&:id).count


但是我觉得它不整洁。有没有更好的方法呢?

你试过这种方法吗

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

您可以在
count
方法中使用字段参数:
Influencer.add\u具有\u关系(Fan.find(2)).count(:id)

我没有执行sql查询。我只是复制了rails在使用上述作用域时执行的操作。当您使用count函数时,您应该在外部使用alias,而不是在内部。我想这就是您出现此错误的原因。是的,我知道,但这是ActiveRecord或其他任何程序执行此行的方式:Influencer.add\u\r兴高采烈(风扇查找(2)).计数