Rails中的Lambda符号.它是如何使用的?作用域内lambda括号内的参数是什么?



假设我有一个Order模型:

class Order < ActiveRecord::Base
   scope :last_month, ->(object) { where(“publish_date > ?”, 1.month.ago) }
end

显然,这就是如何在Rails中定义作用域。但是括号里的对象是什么呢?如果object表示最终的AR集合…为什么说得通呢?幕后发生了什么?为什么这里需要一个过程?

If对象表示结果AR集合

不,object代表作用域的一个参数。如果您有这个作用域,例如:

class User
  scope :created_after, ->(timestamp) { where('created_at > ?', timestamp) }
end

那么你可以这样调用它:

User.created_after(3.days.ago)

但是括号里面的对象是什么呢?

这一行是语法糖:

lambda { |object| where("publish_date > ?", 1.month.ago) }

object值是lambda的参数。

If object表示最终的AR集合…为什么说得通呢?

正如Sergio所说,它代表了您可以传递的其他参数。

幕后发生了什么?为什么这里需要一个过程?

这个过程更像是对老问题的强制解决方案。所以当你定义像这样的作用域时:

scope :created_after, Time.now

时间。Now将在rails应用程序启动时立即运行。所以它不会重新评估时间。每次你运行瞄准镜。Lambda确保每次都执行逻辑。

相关内容

  • 没有找到相关文章

最新更新