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