为什么我们在查询中使用“->”?

Why we use "->" in queries?

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

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

在范围内:

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

提前致谢

它被称为lambda表达式。在 ruby.

中搜索 lambda 函数

为了回答您的问题,如果您想将参数传递给作用域,则在本例中使用 lambda 表达式。不过这不是必需的,因为您可以使用 0 arity 的 lambda 函数。

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

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

这在 Rails 3.x 中有效(我不记得了,但我认为在 4.0 和 4.1 中也是如此)并导致意外行为,因为 Date.today 仅在class 已加载。在生产环境中,这通常意味着 today 范围正在返回 date 等于上次部署日期的记录。如果您改用 lambda:

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

每次调用此作用域时,都会评估传入 lambda 的块。