Ruby on Rails:rails 中的多个条件基于不同的字段使用 like
Ruby on Rails: Multiple conditions in rails based in different fields using like
我的数据库中有一个实体有多个字段。
如果某个输入包含在某些字段中,我需要在此实体中进行搜索,例如
实体车
- model_name
- 所有者
我想要这样的搜索(伪 sql 想法)
Select * FROM Car WHERE (LIKE model_name = "%maz%" OR LIKE owner = "%maz%")
我试过使用查找方法,但它不起作用
searched_string = "%maz%"
Car.find(:all, :conditions => {model_name: searched_string, owner: searched_string})
如何实现?
在 ActiveRecord
查询中使用 conditions
选项时,将为完全匹配生成结果 SQL。此外,您添加的每个条件都将使用 AND
而不是 OR
.
连接
也就是说,您上面的查询生成的 SQL 可能如下所示:
SELECT * FROM Car WHERE (model_name = "%maz%" AND owner = "%maz%")
要获得您要查找的查询,您必须为 WHERE
子句手写 SQL。
Car.where("model_name ILIKE :q OR owner ILIKE :q", q: "%maz%")
注意:我使用的是上面更现代的 ActiveRecord
语法。
好消息是 Rails 5 将包括 support for "or" queries。
我的数据库中有一个实体有多个字段。 如果某个输入包含在某些字段中,我需要在此实体中进行搜索,例如
实体车
- model_name
- 所有者
我想要这样的搜索(伪 sql 想法)
Select * FROM Car WHERE (LIKE model_name = "%maz%" OR LIKE owner = "%maz%")
我试过使用查找方法,但它不起作用
searched_string = "%maz%"
Car.find(:all, :conditions => {model_name: searched_string, owner: searched_string})
如何实现?
在 ActiveRecord
查询中使用 conditions
选项时,将为完全匹配生成结果 SQL。此外,您添加的每个条件都将使用 AND
而不是 OR
.
也就是说,您上面的查询生成的 SQL 可能如下所示:
SELECT * FROM Car WHERE (model_name = "%maz%" AND owner = "%maz%")
要获得您要查找的查询,您必须为 WHERE
子句手写 SQL。
Car.where("model_name ILIKE :q OR owner ILIKE :q", q: "%maz%")
注意:我使用的是上面更现代的 ActiveRecord
语法。
好消息是 Rails 5 将包括 support for "or" queries。