簡體   English   中英

Rails 3:在模型中使用lambda和范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM