Rails中如何对同一字段进行多条件查询?
简化多值字段查询的高效方法
你原来写的Car.where(name: 'green', name: 'blue', name: 'red', name: 'yellow')有个致命问题——Ruby哈希里重复的键会被最后一个覆盖,实际执行时只会查询name: 'yellow'的记录,根本达不到你要的效果。
正确且高效的写法直接用数组作为参数就行:
cars = ["green", "blue", "red", "yellow"] Car.where(name: cars)
Rails会自动把这个转换成SQL的IN查询:
SELECT "cars".* FROM "cars" WHERE "cars"."name" IN ('green', 'blue', 'red', 'yellow')
这种方法的好处:
- 代码简洁,一眼就能看懂逻辑
- 自动处理SQL注入风险,不用手动拼接字符串
- 数据库对
IN查询的优化成熟,性能有保障
如果还要加其他查询条件,直接链式调用就行,比如:
Car.where(name: cars).where(manufacturer: 'Toyota')
内容的提问来源于stack exchange,提问作者Samuel D.
相关产品推荐
相关产品推荐

