Rails通过多个关键字查询

时间:2016-06-14 20:32:16

标签: sql ruby-on-rails ruby

我正在尝试为我正在处理的项目创建自定义搜索方法。理想情况下,我希望能够使用用户输入和无限数量的关键字来过滤结果,但我愿意为一对夫妇而安顿下来。我的代码仅适用于一个关键字。这是我模型中的代码:

class Food < ActiveRecord::Base
  has_many :meal_items, inverse_of: :food_for_meal, foreign_key: 'food_for_meal_id'
  has_many :user_meals, through: :meal_items

  def self.search (key)
    Food.where("description LIKE ?", "%#{key}%")
  end
end

以下是我尝试使用多个关键字的一次尝试:

class Food < ActiveRecord::Base
  has_many :meal_items, inverse_of: :food_for_meal, foreign_key: 'food_for_meal_id'
  has_many :user_meals, through: :meal_items

  def self.search (key)
    keys = key.split('+')
    Food.where("description LIKE ?", "%#{keys[0]}%") 
          AND ("description LIKE ?", "%#{keys[1]}%")
  end
end

我曾尝试将内容和引号等内容移入和移出,但似乎无法确定正确的语法。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

.where获取SQL片段,所以只需将AND放在里面。

Food.where("description LIKE ? OR description LIKE ?", "%#{keys[0]}%", "%#{keys[1]}%")

你可以为n,键做一些事情:

Food.where((['description LIKE ?'] * keys.size).join(' OR '), *keys.map{ |key| "%#{key}%" })

编辑:您可能希望在我的回答中由评论者指出OR。