[英]Rails OR query with postgres array
我有一個使用postgres數組數據類型的標記系統。 我正在嘗試編寫一個scope
,該scope
將返回包含標簽的所有帖子。 到目前為止,我有這個范圍工作:
scope :with_tag, ->(tag) { where("tags @> ARRAY[?]", tag) }
我想擴展此范圍,以便可以同時查詢多個標簽,理想情況是:
Post.with_tags(['some', 'tags', 'to', 'query'])
它將返回具有這些標簽之一的任何Post
。 我考慮過要制作一個類方法來處理對輸入數組的迭代:
def self.with_tags(args)
# start with empty activerecord relation
# want to output AR relation
results = Post.none
args.each do |tag|
results = results.concat(Post.with_tag(tag))
end
results.flatten
end
但是這種方法對我來說很有趣,因為它正在為每個參數創建一個新查詢。 由於flatten
,它也不會返回ActiveRecord :: Relation,我真的很想將其作為輸出。
我可以使用OR
查詢完成作用域中的操作嗎?
我沒有運行代碼,但我認為&&
運算符&&
您的要求:
scope :with_tags, ->(tags) { where("tags && ARRAY[?]", tags) }
這將為您提供幫助。
intersection = Post.all.map do |i|
i.tags & [ "Your" ,"array"]
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.