使用Rails 4风格的lambda和参数的作用域?

我想知道如何在Rails 4中完成以下操作,或者如果我只是使用Rails 3的方法来使用一个lambdaexpression式,而这个lambdaexpression式可以和4一样以4的方式传递参数。

我对Rails 3相当陌生,并试图通过一些运行Rails 4的示例。

这是我的Rails 3代码:

class Person < ActiveRecord::Base scope :find_lazy, lambda {|id| where(:id => id)} end # In console I can call Person.find_lazy(1) 

所以,如果这是Rails 4的方式是使用 – > {},那是一个lambda,对吧? scope :all_lazy, -> { select("*") }如果我需要一个参数。 我尝试了一些不同的想法,并在控制台中使用 – > {}获取参数错误。

我认为应该是

  scope :find_lazy, -> (id) { where(:id => id) } 

Ruby还没有弃用旧的lambda样式,所以如果你觉得使用它更加舒服,那就去做吧。

我个人并不喜欢这种僵化的lambda语法,但最终他们可能会成为常态,所以习惯它们并没有什么坏处。

Rails 4,你可以这样做:

 scope :find_lazy, -> (id) { where(id: id) } 

那是在老ruby:

 :id => id 

更好的哈希:

 id: id 

为了支持协会:

 scope :find_lazy, -> (object) { where(object_id: object.id) }