簡體   English   中英

Rails模型方法是否需要像作用域一樣包裝在lambda中?

[英]Do Rails model methods need to be wrapped in lambdas like scopes?

我知道如果我在Rails模型中使用作用域方法,則應該將查詢存儲在proc對象中,以便在調用它時對它進行評估,而不是在啟動應用程序時對其進行評估。 例:

scope :shifts_last_week, -> { where(date: (Date.today - 7)..(Date.today)) }

同一模型中的類方法是否需要相同類型的處理? 這些方法在啟動時是否以相同的方式進行評估,或者我可以按如下方式定義方法?

def self.shifts_this_week
  where( date: (Date.today.beginning_of_week(WEEK_START))..(Date.today + 1) )
end

答案是您不必對類方法定義進行相同的lambda包裝,僅在調用方法本身時才執行。 在運行應用程序時執行范圍的原因是因為范圍本身就是一種方法 ,最終會調用“ where”子句(而不僅僅是方法定義)。 在調用定義的方法之前,方法定義本身不會執行。

暫無
暫無

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

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