簡體   English   中英

Rails ActiveRecord“哪里”搜索數組

[英]rails activerecord 'where' search through array

嗨,我有一個搜索查詢問題,其中有3個值(val1,val2,標簽),其中一個是數組(標簽)。 我知道rails不支持數組,但是Postgres支持,並且已經安裝了它。

我有一個示范動作:

  def self.find_object(val1, val2, tags)
    if tags.blank?
      Object.where( val1: val1, val2: val2 ).to_a
    else
      Object.where( "val1 = ? and val2 = ? and tags = [?]", val1, val2, tags).to_a
    end
  end

但是我得到一個錯誤:

PG :: SyntaxError:錯誤:“ [”或附近的語法錯誤:第1行:... HERE(val1 ='Ziemia'和val2 ='1',並且標簽= ['Jadeit'] ... ^:選擇“對象“。*在“對象”中(val1 ='Ziemia'和val2 ='1',標簽= ['Jadeit'])

我的問題是我不知道如何處理數組搜索。 在我的測試應用程序中,這樣的代碼>> >> Student.where("hobby && ARRAY[?]", hobby) ,其中hobby是一個數組,因此,這是我在本示例中的開始。 如果有任何提示,我將很高興:)

編輯:添加了錯誤消息

有兩種在PostgreSQL中創建數組的語法:

  • ARRAY[1,2,3]
  • '{1,2,3}'

所以這些都可以工作:

Object.where( "val1 = ? and val2 = ? and tags = ARRAY[?]", val1, val2, tags).to_a
# or
Object.where( "val1 = ? and val2 = ? and tags = '{?}'", val1, val2, tags).to_a

但是請注意,當使用'{}'語法時,PostgreSQL期望字符串使用雙引號(而不是通常的單引號),因此將這種語法與字符串數組和ActiveRecord一起使用將失敗。 我建議您始終使用永遠不會失敗的ARRAY[]語法。

暫無
暫無

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

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