为什么我们使用" - >"在查询?

时间:2015-03-26 12:03:06

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

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

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

并在范围内:

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

先谢谢

2 个答案:

答案 0 :(得分:2)

->表示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的块。

答案 1 :(得分:-1)

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

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