我想知道如何下面是Rails中4完成,或者如果我只是用了Rails 3的方法使用Lambda可以传递参数以同样的方式与4,因为我用3做。
我很新到Rails 3并试图通过一些样品的工作运行轨道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的方法是使用 - > {},这是一个拉姆达,对不对? scope :all_lazy, -> { select("*") }
如果我需要的参数。 我尝试了一些不同的想法,并在控制台中获取参数的错误使用时 - > {}。
我认为它应该是
scope :find_lazy, -> (id) { where(id: id) }
红宝石并没有过时拉姆达的老式要么,所以如果你使用的一切手段去为它感到更舒适。
我不亲自喜欢stabby拉姆达的语法自己,但最终他们可能会成为一种常态,因此不会伤害到习惯他们。
轨道4,你可以这样做:
scope :find_lazy, -> (id) { where(id: id) }
这是在旧的红宝石:
:id => id
更好的哈希:
id: id
为了支持协会:
scope :find_lazy, -> (object) { where(object_id: object.id) }
家伙我通常使用下面的编程语法
scope :find_lazy, -> (id) { where(id: id) }
但是,当我正在审查使用Codacy我的代码,我发现它提醒我这句法
Use the `lambda` method for multiline lambdas.
我改变了它是和它运作良好
scope :find_lazy, lambda {|id|
where(id: id)
}
scope :find_lazy, -> (id) { where(id: id) }
相当于用
self.find_lazy(id)
where(id: id)
end
基于在轨道导向红宝石 : Using a class method is the preferred way to accept arguments for scopes.
没有理由与lambda表达式优先一起使用范围类的方法。 这是个人喜好的问题。 但是,如果你要遵循的准则,你应该使用类方法的参数时涉及。