如何使用Sequel gem获取group_and_count的结果?

时间:2017-01-27 19:24:09

标签: ruby sequel

我有一个基于续集的课程,我需要做一些摘要。

我正在做group_and_count,我可以看到它正在生成正确的查询。但是,当我尝试访问结果时,Sequel试图将行强制进入我通过以下方式访问的课程:

[33] pry(main)> grouped = Pancakes::Stack.active.group_and_count('health_state')
=> #<Sequel::Mysql2::Dataset: "SELECT 'health_state', count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY 'health_state'">
[34] pry(main)> grouped.each_entry { |row| puts row }
I sequel: (0.001344s) SELECT 'health_state', count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY 'health_state'
#<Pancakes::Stack:0x000000089251a0>
=> #<Sequel::Mysql2::Dataset: "SELECT 'health_state', count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY 'health_state'">
[35] pry(main)> grouped.first
I sequel: (0.001502s) SELECT 'health_state', count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY 'health_state' LIMIT 1
I sequel: (0.001243s) SELECT * FROM `pancakes_stacks` WHERE (`id` IS NULL) LIMIT 1
=> #<Pancakes::Stack:0x44b068c>

我可以通过解决ORM的问题得到我需要的东西,但这似乎要求我重新实现上面的active方法,并弄清楚如何从类名中获取表名: / p>

[38] pry(main)> groupie = grouped.db[:pancakes_stacks].where(deleted_at:nil).group_and_count(:health_state)
=> #<Sequel::Mysql2::Dataset: "SELECT `health_state`, count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY `health_state`">
[39] pry(main)> groupie.each_entry { |row| puts row }
I sequel: (0.001598s) SELECT `health_state`, count(*) AS `count` FROM `pancakes_stacks` WHERE (`deleted_at` IS NULL) GROUP BY `health_state`
{:health_state=>nil, :count=>3}
{:health_state=>"healthy", :count=>10}

难道没有更简单的方法吗?我在querying page上花了很多时间,但没有一个示例显示如何访问结果。

2 个答案:

答案 0 :(得分:0)

您可能只想在数据集中添加.naked,这将使数据集返回哈希值而不是模型对象。

答案 1 :(得分:0)

我个人使用square brackets方法获取一行的:count属性:

row[:count]