多条活动记录中的条件
我需要检查我的记录与多个类似的语句,最好的方法是什么?即多条活动记录中的条件
names = ['alice', 'bob', 'mark']
我有表可以说,在我的数据库或(人民)的人,所以我想选择谁拥有的名称,如高于3所有的人。
找到这个答案:
https://*.com/a/5333281/169277
对于使用等,但我无法弄清楚如何通过值,而不是单值的数组。有任何想法吗?
UPDATE:
我需要一个像因为人有两个名字
试试这个
names = ['alice', 'bob', 'mark']
Person.where('name REGEXP ?',names.join('|'))
同时匹配像上一列多个值,你可以使用REGEXP代替LIKE
这将生成一个sql语句,并在条款
检查生成的SQL只需添加.to_sql
Person.where('name REGEXP ?',names.join('|')).to_sql
有一些插件来提供这种类型的查询,但你真正需要的是Arel。
你需要使用像这样
wildcard_names = names.collect { |name| "%#{name}%" } # => ["%alice%","%bob%","%mark%"]
准备查询参数LIKE,那么你会使用阿雷尔的#matches_any
方法。
people_table = People.arel_table
People.where(people_table[:name].matches_any(wildcard_names))
如PriteshJ提到的,添加to_sql
以确认查询是正确的。
刚一说明:在更大的数据集领先的通配符可能会导致性能问题。 – Magnuss 2013-04-22 13:33:32
这将工作。 Person.where('name SIMILAR TO ?',"(alice|bob|mark)")
先进的匹配也可以做Person.where('name SIMILAR TO ?',"%(alice|bob|mark)%")
以上生产线也将工作,如果名称为“乔恩爱丽丝”即正则表达式匹配。
参考PostgreSQL文档:http://www.postgresql.org/docs/9.0/static/functions-matching.html
我需要像,因为有人可以有两个名字和这两个名字一个是不中间名 – 2013-04-22 12:46:19
@GandalfStormCrow okayy,我已经更新了我的答案 – PriteshJ 2013-04-22 19:26:02