加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Rails 3.1 named_scope

发布时间:2020-12-17 03:45:49 所属栏目:百科 来源:网络整理
导读:编写下面代码的Rails 3.1是什么: named_scope :min_2_items_last_90_days,{ :include = { :orders = :order_items },:conditions = ['orders.created_at = ?',90.days.ago],:group = 'people.id',:having = 'COUNT(order_items.id) = 2' } 解决方法 写作时
编写下面代码的Rails 3.1是什么:

named_scope :min_2_items_last_90_days,{
    :include => { :orders => :order_items },:conditions => ['orders.created_at >= ?',90.days.ago],:group   => 'people.id',:having => 'COUNT(order_items.id) >= 2'
  }

解决方法

写作时

scope :min_2_items_last_90_days,where(...)

在语法上是正确的,它可能(就像你的原始代码)没有做你想象的那么多.

在这两种情况下,90.days.ago仅在加载类时进行一次评估,因此90天将始终是您上次重新启动应用程序之前的90天.如果您没有重新启动应用程序10天,那么您实际上会查看过去100天内创建的内容.您不会在开发中注意到这一点,因为您的源代码会不断被重新加载(因此会重新评估90.days).

相反,你应该这样做

scope :min_2_items_last_90_days,lambda { where('orders.created_at >= ?',90.days.ago).includes(...) ... }

这确保了每次使用示波器时都会重新评估条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读