kap*_*lan 141 scope ruby-on-rails-4 rails-activerecord
我想知道如何在Rails 4中完成以下操作,或者我是否只使用Rails 3方法来使用lambda,它可以以与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)
Run Code Online (Sandbox Code Playgroud)
所以,如果这是Rails 4方式是使用 - > {},那是一个lambda,对吧?scope :all_lazy, -> { select("*") }如果我需要一个论点怎么办?我尝试了一些不同的想法,并在使用 - > {}时在控制台中获得参数错误.
lis*_*is2 300
我认为应该是
scope :find_lazy, -> (id) { where(id: id) }
Run Code Online (Sandbox Code Playgroud)
Bra*_*lva 10
Ruby也没有弃用旧式的lambda,所以如果你觉得通过各种方式使用它会更加舒适.
我本人并不喜欢自己的stabby lambda语法,但最终它们可能会成为常态,因此习惯它们并不会受到伤害.
小智 7
Rails 4,你可以这样做:
scope :find_lazy, -> (id) { where(id: id) }
Run Code Online (Sandbox Code Playgroud)
那是旧红宝石:
:id => id
Run Code Online (Sandbox Code Playgroud)
更好的哈希:
id: id
Run Code Online (Sandbox Code Playgroud)
家伙,我通常使用以下编程语法
scope :find_lazy, -> (id) { where(id: id) }
Run Code Online (Sandbox Code Playgroud)
但是,当我使用Codacy查看代码时,发现它提醒我有关此语法的信息
Use the `lambda` method for multiline lambdas.
Run Code Online (Sandbox Code Playgroud)
我将其更改为工作正常
scope :find_lazy, lambda {|id|
where(id: id)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89664 次 |
| 最近记录: |