2013-10-16 7 views
12

どうすればこのようにすることができますか?RailsとLIKEの配列

myarray = ["name1","name2"] 
Product.where('name ILIKE ?', %#{myarray}%) 

私は名前がname1name2のようなもので、すべての製品を取得する必要があります。

これは可能ですか?

答えて

-1

あなたは平等(SQLのようLIKE 'string'whereの意味での文字列らしさを探している場合は、配列値のハッシュを受け入れる:

しかし
Product.where(name: myarray) 

Product.where(name: myarray).to_sql 
    # => SELECT "products".* FROM "products" WHERE "products"."name" IN ('x', 'y') 

、あなたがストリング(のようなLIKE '%substring%'によってフィルタ処理する場合SQLで)Edgars Jekabsonsの答えをチェックしてください。

+0

LIKEについて尋ねた質問:

select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']); 

は次のようにRailsの/ Rubyの構文に変換するようにしてください。 –

+0

質問は、 'name1'と' name2'を検索するためのアプローチと同じようなものを求めました。これは正確に私の答えがしているものです。あなたは本当に別のアプローチを提供するので、私の答えをdownvoteしますか? –

+0

彼は答えが 'name1'と' name2'に完全に一致している間に結果に 'name1'または' name2'という単語を含む名前を含めることを望みます。彼は 'ILIKE'キーワードで問い合わせる方法を尋ねていました。 –

-4
Product.where('name IN (?)', myarray) 

トリックを行う必要があります;)

24

私はあなたがILIKE機能ですべての値をテストしたいと思います。

これはPostgresの中で行うの方法です:

myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" } 
Product.where("name ILIKE ANY (array[?])", myarray_with_percetage_signs)