2017-08-08 35 views
-1

我的UUID的数组的哈希这样打开阵列逗号分隔字符串

{ "my_uuids"=> ["uuid1", "uuid2", "uuid3"] } 

我也有一个原始的SQL查询来插入散列的阵列中的所有的UUID到:

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

我不知道会有多少uuid,因此将每个uuid设置为一个变量不会缩放。

一串字符串不能用于mysql(即"'uuid1', 'uuid2', 'uuid3'")。

+1

作为一个侧面说明,除非'uuids'是一个变量指向某个对象,'{=的UUID > [“uuid1”,“uuid2”,“uuid3”]}'是无效的语法。可能应该是'{:uuids => [“uuid1”,“uuid2”,“uuid3”]}' –

+0

你说得对,对不起我的格式。但你知道我的意思 – Scap

回答

2

试试这个

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

在我的问题我的sql查询是简化的,实际上我有几个联接和选择哪些不会与活动记录缩放 – Scap

+2

等等?你可以分开每个部分。连接和选择的字符串,以及where部分的散列。 'Bar.joins(“INNER JOIN t2 ON ...”)。select(“id,name,etc”)。其中(uuid:your_hash ['uuids'])' – Ursus

+1

@Scap *“不会缩放活跃的纪录“*甚至是指?连接甚至不必是'String',你可以将'Arel'加入到AR查询中,并且程序集仍然是正确的。 [教化的例子](https://stackoverflow.com/a/44890594/1978251)如果你只相信 – engineersmnky

0

下面是答案我一直在寻找:

SELECT bars.foo 
FROM bars 
WHERE bars.uuid IN (#{myuuids.map {|str| "\"#{str}\""}.join(", ")})