我如何计算Rails中工作表中的总票数
当我试图计算我在票数表中的总票数时,我很困惑。
serviceproviders has_many votes votes belongs_to serviceproviders
我试过这样的:
sp = Serviceprovider.joins(:votes).group_by(&:id).count
但它没有得到正确的输出。
我想要的示例输出是:
如果在表中Jhon Doe在表中有5行投票,我可以在查询时得到总共5票。 可以任何给我的想法如何执行查询。 谢谢!
更新:
谢谢你的回答。
我在我的导轨c中试过这个。
vote = Vote.joins(:serviceprovider).group(:serviceprovider_id).count
我得到了结果: {108=>2, 109=>1}
我的问题如何获得前10名最高票?
这是表格:
app_development=# select * from votes; id | city | created_at | updated_at | service_provider_id ----+---------+----------------------------+----------------------------+--------------------- 1 | B\'lore | 2015-02-19 17:35:58.061324 | 2015-02-19 17:35:58.083479 | 3 2 | Kol | 2015-02-19 17:35:58.103013 | 2015-02-19 17:35:58.123405 | 2 3 | Mum | 2015-02-19 17:35:58.11242 | 2015-02-19 17:35:58.125345 | 2 4 | Kochin | 2015-02-19 17:35:58.136139 | 2015-02-19 17:35:58.167971 | 1 5 | Mum | 2015-02-19 17:35:58.145833 | 2015-02-19 17:35:58.170319 | 1 6 | Chennai | 2015-02-19 17:35:58.156755 | 2015-02-19 17:35:58.171996 | 1 (6 rows) app_development=# select * from service_providers; id | name | created_at | updated_at ----+------+----------------------------+---------------------------- 1 | MTS | 2015-02-19 17:35:57.837508 | 2015-02-19 17:35:57.837508 2 | HCL | 2015-02-19 17:35:57.923479 | 2015-02-19 17:35:57.923479 3 | ACL | 2015-02-19 17:35:57.934414 | 2015-02-19 17:35:57.934414
您需要以下查询才能获得所需的结果:
Vote.joins(:service_provider) .group(:service_provider_id) .order("count_all desc") .limit(10) .count
在Rails 控制台中测试:
[arup@app]$ rails c Loading development environment (Rails 4.1.1) [1] pry(main)> Vote.joins(:service_provider).group(:service_provider_id).order("count_all desc").limit(2).count (2.0ms) SELECT COUNT(*) AS count_all, service_provider_id AS service_provider_id FROM "votes" INNER JOIN "service_providers" ON "service_providers"."id" = "votes"."service_provider_id" GROUP BY service_provider_id ORDER BY count_all desc LIMIT 2 => {1=>3, 2=>2} [2] pry(main)>
试试这个
sp = ServiceProvider.find_by_name("Jhon Doe"); @votes = sp.votes.count