簡體   English   中英

如何在作用域上使用“或”

[英]How to use “or” on scopes

嘗試使用or使用范圍,但它似乎不起作用。

first_20返回一個關系,但是當我使用 or 時,它抱怨它返回一個數組,並拋出一個錯誤。 在我能找到的大多數示例中,它的完成方式與我的完全一樣。

 scope :first_20, -> {
    first(20)
  }

 scope :starred, ->(list_or_urls) {
   where(url: list_or_urls)
 }

然后稍后調用它..

Org.first_20.or(starred(urls))

得到一個

ArgumentError (You have passed Array object to #or. Pass an ActiveRecord::Relation object instead.)
 Org.first_20.or(starred(list_or_urls))

怎么可能使用or使用范圍?

first_20 scope 中,使用以下查詢來返回ActiveRecord::Relationfirst(20)返回一個Array而不是relation ,這就是你的錯誤告訴

scope :first_20, -> { limit(20).order('id ASC') }

並且,由於starred是 class 方法,因此您需要在Org class 上調用它。

Org.first_20.or(Org.starred(urls))

希望有幫助!

我同意Rajdeep's回答,它肯定會起作用,以下是另一種方法

scope :first_20_or_starred, ->(list_or_urls) { first_20.or(starred(list_or_urls)}

& 然后

Org.first_20_or_starred

暫無
暫無

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

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