gpt4 book ai didi

ruby - Rails 3.1 命名范围

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:09 25 4
gpt4 key购买 nike

编写以下代码的 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(...) ... }

这确保每次使用范围时都会重新评估条件。

关于ruby - Rails 3.1 命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com