我试图从项目名称中包含“Fox”一词的项目模型中提取所有记录。我可以进行有效的记录搜索并返回特定的project_names,比如'Brown Fox':
@projects = Project.where("project_name like ?", "Brown Fox")
但是如果我想要返回包含'Fox'的所有名字,除非完整的项目名称是'Fox',否则这不起作用:
@projects = Project.where("project_name like ?", "Fox")
如何进行搜索,返回名称中包含“Fox”字样的所有对象?
答案 0 :(得分:9)
尝试使用:
variable = "Fox"
Project.where("project_name like ?", "%#{variable}%")
答案 1 :(得分:1)
这里是一个版本,可让您处理任意数量的输入单词并在名称中搜索所有单词。我一直在寻找这个答案,但没有找到更复杂的案例,所以这里是:
def self.search(pattern)
if pattern.blank? # blank? covers both nil and empty string
all
else
search_functions = []
search_terms = pattern.split(' ').map{|word| "%#{word.downcase}%"}
search_terms.length.times do |i|
search_functions << 'LOWER(project_name) LIKE ?'
end
like_patterns = search_functions.join(' and ')
where("#{like_patterns}", *search_terms)
end
end
答案 2 :(得分:0)
您可以使用SQL %
运算符:
@projects = Project.where("project_name like ?", "%Fox%")
请注意,如果您希望查询返回忽略单词大小写的结果,则可以使用PostgreSQL ilike
而不是like
。
答案 3 :(得分:0)
你试过ransack吗?
通过搜索,您可以执行类似
的操作@projects = Project.search(:project_name_cont => "Fox")
如果你认为它太多了你需要的东西。您可以使用%
运算符,如MurifoX所说