为什么lambda在rails范围内传递?为什么不只是一个典型的块?例如:
scope :by_age, lambda do |age|
joins(:profile).where('profile.age = ?', age) unless age.nil?
end
由于
答案 0 :(得分:1)
但它是一样的。您刚刚使用了do ... end语法而不是{}。
{}并且...结束它只是两种不同的语法,但你可以使用你喜欢的语法。 此外,lambda还有两种不同的语法。 一个,由你提出,第二个:
-> { ... your_code ... }
或带参数:
->(arg) { ... your_code... }
第二种语法在范围内看起来非常好。
scope :by_age, ->(age) { joins(:profile).where('profile.age = ?', age) unless age.nil? }
答案 1 :(得分:0)
对于命名范围,block参数用于扩展。要使用查询块,您必须将其作为标准参数传递(使用lambda
)
答案 2 :(得分:-1)
据我所知,A Scope可以使用lambda来获取参数。