Ruby on rails Rails 3.2查询-。是否存在?

Ruby on rails Rails 3.2查询-。是否存在?,ruby-on-rails,activerecord,rails-activerecord,Ruby On Rails,Activerecord,Rails Activerecord,我有大约500家分店。每个出口每天至少监控一次。我正试图得到一份每天都被监控的门店名单 我目前在查询中遇到问题,非常感谢您的帮助: <% for outlet in @outlets %> <% if Monitoring.exists?( :outlet_id => outlet.id, 'DATE(created_at) = ?', Date.today ) %> outlet.id,'日期(创建时间)=?',DATE.today)%> @outl

我有大约500家分店。每个出口每天至少监控一次。我正试图得到一份每天都被监控的门店名单

我目前在查询中遇到问题,非常感谢您的帮助:

<% for outlet in @outlets %>
    <% if Monitoring.exists?( :outlet_id => outlet.id, 'DATE(created_at) = ?', Date.today ) %>

outlet.id,'日期(创建时间)=?',DATE.today)%>
@outlets是包含Outlet.all的实例变量

这个查询给我留下了一个语法错误。正确的方法是什么?我正在尝试检查监控是否属于门店,以及监控记录是否是今天创建的

另外,我不完全确定这个查询对速度的影响。一个页面上一次最多有2000个门店(这是一个仪表板,所以它们显示为红点或绿点)


非常感谢您的帮助。

您遇到了一个语法错误,因为您试图混合隐式哈希和隐式数组参数:

Monitoring.exists?(:outlet_id => outlet.id, 'DATE(created_at) = ?', Date.today)
存在?
方法需要一个散列作为其单个参数。但是,您希望在查询中使用SQL函数,这意味着您必须使用
模型。其中(…)。存在?
表单:

Monitoring.where(:outlet_id => outlet.id).where('date(created_at) = ?', Date.today).exists?
这仍然会让你一遍又一遍地点击数据库来点亮你的灯。你可以用这样的东西预先计算整个混乱:

counts = Monitoring.where('date(created_at) = ?', Date.today).count(:group => :outlet_id)

然后查看使用
counts.has_键?outlet.id
在循环中。添加
where(:outlet\u id=>outlet\u id)
(where
outlet\u id
是您感兴趣的id)也可能有意义。您可以将
计数
查询与生成
@outlets
的查询结合起来。

谢谢,您说得对,我不敢相信我错过了。关于多次访问数据库的性能,您完全正确。我真的不确定
counts=Monitoring.where('date(created_at)=?',date.today)。count(:group=>:outlet_id)
是如何工作的,请您进一步解释一下,它看起来很有趣@Ammar:我们的想法是计算今天每个
outlet\u id
的所有匹配项,您可以在一次查询中完成这项工作(即在点击数据库时)。结果将只包含
存在的项目?
将返回true。如何使用
counts.has\u键?outlet.id
我以前从未遇到过这样的事情,所以请原谅我有点不高兴:P谢谢你一直以来的帮助@Ammar:
计数
将是一个散列实例,密钥将是插座ID。我真的很抱歉,我知道我听起来完全愚蠢,但我不知道我将如何使用它,你能告诉我需要在哪里吗?示例控制器是什么样子的/