簡體   English   中英

Rails 3.2:鏈接lambda范圍?

[英]Rails 3.2: Chaining lambda scopes?

在我的Rails 3.2.8應用程序中,我有一些命名作用域,在某些情況下,我想將它們鏈接在一起。

因此,例如,我有以下兩個范圍:

scope :by_status, lambda { |status| if status == "All" then WorkRequest.all else WorkRequest.find_all_by_status(status) end }
scope :in_date_range, lambda { |start_date, end_date| includes([:person, :pier_module]).where("(status_date >= ?) AND (status_date <= ?)", start_date, end_date) }

我分別使用它們,但我也希望能夠像這樣將它們一起調用:

WorkRequest.by_status("Accepted").in_date_range("2012-01-01", "2012-10-02")

當我嘗試說它抱怨in_date_range不是Array的方法時。

但是我還有另一個范圍

scope :active, includes([:person, :pier_module]).where("status = 'New Request'")

如果我願意

WorkRequest.active.in_date_range("2012-01-01", "2012-10-02")

有用! 顯然,活動范圍返回一個Relation,而lambda范圍返回Array,因此無法鏈接。

我很想知道為什么更簡單的作用域和lambda作用域之間的區別,參數如何影響它,以及除了編寫合並的作用域之外我是否還能做些什么。

scope :by_status_in_date_range, lambda { |status, start_date, end_date|  includes([:person, :pier_module]).where("(status = ?) AND (status_date >= ?) AND (status_date <= ?)", status, start_date, end_date) }

可行,但不是很干(因為我也需要單獨的示波器)或Rails-ish。 在這里和其他地方搜索時,我已經看到了類似的問題,但是似乎沒有一個問題適用於這種情況,在這種情況下,我試圖用參數鏈接兩個lambda。

發生這種情況是因為在您的范圍內

scope :by_status, lambda { |status| if status == "All" then WorkRequest.all else WorkRequest.find_all_by_status(status) end }

allfind_all_by_status返回Array而不是ActiveRecord::Relation 例如,應將其替換為where

scope :by_status, lambda { |status| where(:status => status) unless status == "All" }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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