我有一个User
模型,其中包含first_name
和last_name
个属性,我想查找在给定数组中包含其中一个名称的所有Users
。例如,如果我的数组是[“John Doe”,“Mary Jane”,“Little John”],我会想要执行以下mysql
查询
SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))
是否有以友好的方式编写此查询?
答案 0 :(得分:3)
你的数组是这样的:
my_array = ["John Doe", "Mary Jane", "Little John"]
my_array.collect{|m| m.split(" ")}
上面的代码构建了2D数组。在上面的代码 my_array vaue之后:
[["John", "Doe"], ["Mary", "Jane"], ["Little", "John"]]
现在用括号替换方括号:
resultable_key = my_array.inspect.gsub("[","(").gsub("]", ")")
查询构建完成。现在在db:
中进行查询User.where("(first_name, last_name) IN #{resultable_key}")
这与您的查询完全相同:
SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))