有查询的Rails

时间:2014-10-20 22:33:20

标签: ruby-on-rails postgresql activerecord join where

这是我正在尝试运行的查询:

Stack.joins(:services)
     .select('stacks.id, stacks.name, count(services.id) as services_count')
     .group('stacks.id').having('services_count > 2')

我得到的错误是:

  

ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:列“services_count”不存在   第1行:... ack_items“。”service_id“GROUP BY stacks.id HAVING services_c ...


以下是我的Stack模型的相关信息:

class Stack < ActiveRecord::Base
  has_many :services, through: :stack_items
end

class StackItem < ActiveRecord::Base
  belongs_to :service
  belongs_to :stack
end

class Service < ActiveRecord::Base
  has_many :stacks, through: :stack_items, dependent: :destroy    
end

我只想获得一个Stacks的集合,其中至少有3个堆栈项目service.weight == 1

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您在Postgres的SELECT列表中设置的别名在group by子句中不可用,因此只需将.having('services_count > 2')更改为.having('count(services.id) > 2')