2017-08-08 9 views
-1

私はそのようなターン配列は

{ "my_uuids"=> ["uuid1", "uuid2", "uuid3"] } 
としてのUUIDの配列のハッシュを持って

私はまたにハッシュの配列内のすべてのUUIDを挿入する生のSQLクエリがあります。

SELECT bars.foo 
FROM bars 
WHERE bars.uuid IN ("uuid1", "uuid2", "uuid3") 

私はuuidがいくつあるのかわからないので、各uuidを変数に設定することはスケーリングされません。

文字列の文字列がmysqlで動作しません(つまり"'uuid1', 'uuid2', 'uuid3'")。

+1

' {のUUID > ["uuid1"、 "uuid2"、 "uuid3"]} 'は有効な構文ではありません。おそらく '{:uuids => [" uuid1 "、" uuid2 "、" uuid3 "]}' –

+0

と書いてあります。しかし、あなたは私が意味していたことを知っていた – Scap

答えて

2

はここでは、この1

Bar.where(uuid: your_hash['uuids']).select(:foo) 
+0

私の質問の私のSQLクエリは、現実的には、いくつかの結合を持って、アクティブなレコードでスケールされませんを選択して – Scap

+2

とそう?それぞれの部分を分けることができます。結合と選択のための文字列とwhere部分のハッシュ。 (uuid:your_hash ['uuids']) ' – Ursus

+1

@Scap *は何の縮尺で拡大されませんか?アクティブレコード "*でも意味ですか?ジョインは 'String'でもなくても、' Arel'ジョインをARクエリにマージすることができ、アセンブリは正しいでしょう。 [譲渡の例](https://stackoverflow.com/a/44890594/1978251)信じているだけでもすべてが可能です – engineersmnky

0

を試してみて、私が探していた答えである:= `uuids`は、いくつかのオブジェクトを指し示す変数でない限り、注意点として

SELECT bars.foo 
FROM bars 
WHERE bars.uuid IN (#{myuuids.map {|str| "\"#{str}\""}.join(", ")}) 
関連する問題