[英]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::Relation
, first(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.