使用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
如果您使用所有三个字段必须是字符串。