如何从Controller创建更复杂的SQL查询

时间:2016-10-09 22:57:19

标签: sql ruby-on-rails ruby sqlite

首先,请允许我说,我不知道当前的问题是"正确的"得到我想要的方式。这就是问题所在。

我有一个名为setTimeout的数据库,如下所示:

users

我知道在Controller中,我可以编写类似

的内容
|__id__|__dateTime__|___ipAddress___|__userName__|
|   1  |   time1    |  192.168.0.1  |  Paul      |
|   2  |   time2    |  192.168.0.22 |  Jessica   |
|   3  |   time1    |  192.168.0.22 |  Jon       |

那相当于

User.find(3)

但是,如果在我的日志中,我想要查找有多少个唯一的IP地址,或者我想要一个返回SELECT * FROM users WHERE (users.id = 3) LIMIT 1 期间发生的事件数量的查询。

有没有办法在Controller中执行此操作,或者这不是应该在那样的地方完成的?

1 个答案:

答案 0 :(得分:1)

Active Record提供查询界面,可以是found on the guides here。您可以使用#find_by_query执行arbitrary queries as well,而不需要依赖辅助方法。

  

找到多少个唯一的IP地址

这将通过类似的方式实现 User.select(:ipAddress).distinct.count

  

我想要一个返回time1期间发生的事件数量的查询

我不确定您对事件的意义,但如果您想要计算User表中与给定时间戳匹配的条目,您可以执行User.where(:dateTime=>time1).count

(我假设您的给定示例是假的,但您不希望将列命名为dateTime)