簡體   English   中英

ActiveRecord范圍返回一個數組

[英]ActiveRecord scope returns an array

我有一個范圍,在調用它時返回一個Array而不是一個ActiveRecord Relation ,但如果我調用范圍內的方法,它將返回一個ActiveRecord Relation

scope :beta_user, -> {
  joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'")
}

# Calling scope directly
Model.beta_user # => [Model1, Model2, Model3]
Model.beta_user.class # => Array

# Calling scope definition
Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'") 
=> [Model1, Model2, Model3]

Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'").class
=> Model::ActiveRecord_Relation

所以我的問題是,不一致的返回類型會發生什么? 在此之后我無法鏈接其他范圍(我仍然可以在它之前鏈接它們)並且我不能使用其他AR Relation方法,例如#order#pluck

從我在控制台中可以看到,似乎調用Model.beta_user.class仍在執行查詢,而Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'")不執行查詢。 我認為范圍不應該執行,直到它需要為鏈式范圍/查詢進行優化。

范圍確實返回一個關系對象,但是它會在必要時轉換它,當你在控制台中運行范圍時,它會嘗試檢查它並進行轉換。

但試試這個,它應該工作:

scope = Model.beta_user

# pluck should work
scope.pluck(:id)

所有其他方法,如firstlastcountall等......應該可行

暫無
暫無

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

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