【问题标题】:Why use lambdas in active record scopes为什么在活动记录范围内使用 lambda
【发布时间】:2012-07-08 17:17:07
【问题描述】:

我正在阅读Beginning Rails 3。这本书创建了一个项目,用户可以在其中发布文章。现在在 Article 对象中,他们创建了 3 个范围,如下所示:

scope :published, where("articles.published_at IS NOT NULL")
scope :draft, where("articles.published_at IS NULL")
scope :recent, lambda { published.where("articles.published_at > ?", 1.week.ago.to_date)}

现在最后一个 lambda 函数我可以用这个 scope 语句替换它,我得到相同的结果:

scope :recent, where("published_at > ?", 1.week.ago.to_date)

在这里使用 lambda 有什么好处?

【问题讨论】:

    标签: ruby ruby-on-rails-3


    【解决方案1】:

    如果您不使用lambda,时间1.week.ago 将在应用程序启动时计算并缓存。因此,即使您的应用程序已经运行了几个月,它仍然会指向应用程序开始前 1 周的时间。

    在开发环境中您不会注意到这一点,因为每次请求都会重新加载应用程序代码。使用 lambda,即使在生产环境中,您也可以确保每次调用您的范围时都会重新计算它。

    【讨论】:

    • 好的,为什么书中没有提到这个?顺便感谢@rubish 的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2012-10-30
    相关资源
    最近更新 更多