簡體   English   中英

Rails OR查詢與Postgres數組

[英]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.

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