【问题标题】:Why we use "->" in queries?为什么我们在查询中使用“->”?
【发布时间】:2015-03-26 12:03:05
【问题描述】:

我搜索了很多但没有找到有意义的东西,关于为什么我们在查询中使用“->”:

如关联: has_many :comments, -> { order('posted_at DESC') }

在范围内:

scope :active, -> { where state: 'active' }

提前致谢

【问题讨论】:

标签: ruby-on-rails scope associations model-associations named-scope


【解决方案1】:

-> 表示 lambda 表达式。你不得不在作用域中使用它来防止在以前的 Rails 版本中可能出现的一种错误,当在作用域中使用的表达式只被评估一次时,当类被加载时。例如:

scope :today, where(date: Date.today)

这在 Rails 3.x 中有效(我不记得了,但我认为在 4.0 和 4.1 中也有效)并导致了意外行为,因为 Date.today 在加载类时只评估了一次。在 prod 环境中,这通常意味着today 范围正在返回记录,date 等于上次部署日期。如果你改用 lambda:

scope :today, -> { where(date: Date.today) }

每次调用此范围时,都会评估传递给 lambda 的块。

【讨论】:

    【解决方案2】:

    称为 lambda 表达式。在 ruby​​ 中搜索 lambda 函数。

    为了回答您的问题,如果您想将参数传递给范围,则在这种情况下使用 lambda 表达式。不过这不是必需的,因为您可以使用 0 arity 的 lambda 函数。

    【讨论】:

    • 1.现在强制使用 lambda。 2. Arity 无关 - 看看我的例子 - 我也没有传递任何参数,但是当我使用 lambda 时会有所不同。
    猜你喜欢
    • 2018-06-29
    • 2014-08-24
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2017-09-25
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多