ruby-on-rails - 搜索多列-Rails

标签 ruby-on-rails search conditional-statements

我目前正在为我的Rails应用程序编写一种搜索方法,此刻它可以正常工作。我的game.rb中包含以下内容:

def self.search(search)
  if search
    find(:all, :conditions => ['game_name LIKE ? OR genre LIKE ? OR console LIKE ?', "%#{search}%", "#{search}", "#{search}"])
  else
    find(:all)
  end
end


现在可以正常搜索了,但是我的问题是,如果game_name中有一个包含单词“ playstation”的记录,它将在此处完成搜索。它仅返回该记录,而不返回所有在控制台中存储有“ playstation”的游戏。现在我明白这是因为我的条件中有“或”的意思,但是我不知道其他选择。 “ AND”要求所有条件都匹配或完全不返回。我可以使用AND和OR的替代方法吗?帮助将不胜感激。

如果有一个解决方案具有单独的搜索框和条目,那就很好了,我不必要求搜索就可以基于一个搜索表单找到所有内容。

最佳答案

如果我正确理解了您的问题,那么您的SQL看起来对我来说很不错。 OR子句将返回所有在column1,column2或column3中匹配的记录。它不会在第一场比赛就停止。我确实看到您的参数有问题,因为第一个您使用的是%的LIKE,但第二个您不是,也许这就是您的问题所在。

这是否是您的发现(第二和第三次搜索的百分比)?

find(:all, :conditions => ['game_name LIKE ? OR genre LIKE ? OR console LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"])


或更好地使用DRY版本(以上版本不适用于Rails 4.2+):

Item.where('game_name LIKE :search OR genre LIKE :search OR console LIKE :search', search: "%#{search}%")

关于ruby-on-rails - 搜索多列-Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379884/

相关文章:

mysql - 在rails deviseomniauth中为多个用户使用OR查询

ruby-on-rails - GemNotFoundException 异常

swift 3 - 搜索结果也带有变音符号

java - 用于多个类的相同 JTextField 并创建搜索引擎

python - 如何在 Python 中使用 pyarrow 读取有条件的 Parquet 文件

javascript - 在rails 3.2中访问javascript中的图像

javascript - 将 JS 变量传递给 Rails 中的 Controller

java - 在 Java 中实现自动完成

sql - 对 null 的算术运算

excel - 如果满足三个条件,如何突出显示一行?