我正在尝试为我正在处理的项目创建自定义搜索方法。理想情况下,我希望能够使用用户输入和无限数量的关键字来过滤结果,但我愿意为一对夫妇而安顿下来。我的代码仅适用于一个关键字。这是我模型中的代码:
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
我曾尝试将内容和引号等内容移入和移出,但似乎无法确定正确的语法。任何帮助,将不胜感激。
答案 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。