使用AND / OR检查Ruby on Rails搜索中的多个条件

我目前的方法如下:

def self.search(query) where("name like ?", "%#{query}%") end 

如何添加其他属性? 例如,我无法让它工作,但它显示了我想要做的事情:

  def self.search(query) where("name like ? OR model like ? OR year like ?", "%#{query}%") end 

其他答案都有效,但在这些情况下使用命名占位符更容易,因为那样您就不必多次指定查询:

 def self.search query where( "name LIKE :query OR model LIKE :query OR year LIKE :query", query: "%#{query}%") end 

更新

在评论中,Stefan建议使用HEREDOC进行长时间查询,这是一个很好的建议。 我还想提供我如何制作这个特殊的字符串。

因为它基本上是重复三次相同的事情,然后加入OR我实际上创建了一个小循环来构造字符串,如下所示:

 query_string = %w[name model year].map{|n| n+" LIKE :query"}.join(" OR ") where( query_string, query: ) 

这样,如果我想稍后添加另一个字段,那么它就会简单得多。

我认为答案接近你的问题是: def self.search(name,model) where [ "name like ? OR model like ?" , name, model] end def self.search(name,model) where [ "name like ? OR model like ?" , name, model] end

我想,你想这样做:

 def self.search(query) where("name like ? OR model like ? OR year like ?", "%#{query}%", "%#{query}%", "%#{query}%") end 

如果您使用所有三个字段必须是字符串。