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