[英]Rails 3: Use of lambda with scopes in model
嗨我正在閱讀Rails Recipes,並且有一個部分,作者在模型中使用范圍,以便控制器可以訪問某些查詢片段而無需向控制器添加查詢(因此違反了MVC規則)。 有一次他有這個:
class Wombat < ActiveRecord::Base
scope :with_bio_containing, lambda {|query| where("bio like ?", "%#{query}%").
order(:age) }
end
我從未使用過lambda和Proc對象。 這相當於在范圍中添加一個參數,以便在概念上它的scope :with_bio_containing(query)
,因此允許我自定義范圍,就好像它是一個函數一樣? lambda是否常用於Rails中的范圍?
在概念上,你是對的。 這就像發送一個論點。 您可以像這樣調用此特定范圍:
Wombat.with_bio_containing("born in Canada")
您可以創建一個包含許多參數的范圍:
# code
scope :with_name_and_age, lambda { |name, age| where(:name => name, :age => age) }
# call
Wombat.with_name_and_age("Joey", 14)
你也可以沒有參數:
# code
scope :from_canada, lambda { where(:country => "Canada") }
# call
Wombat.from_canada
是的,lambdas通常是根據我自己的經驗使用的。
這兩個問題都是。
Wombat.with_bio_containing('foo')在運行時被評估為:
select * from wombats where bio like "%foo%" order by age
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.