我目前正在为我的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/