Rails活动记录搜索 - 名称包含一个单词

时间:2013-07-30 20:35:55

标签: ruby-on-rails-3 search activerecord

我试图从项目名称中包含“Fox”一词的项目模型中提取所有记录。我可以进行有效的记录搜索并返回特定的project_names,比如'Brown Fox':

@projects = Project.where("project_name like ?", "Brown Fox")

但是如果我想要返回包含'Fox'的所有名字,除非完整的项目名称是'Fox',否则这不起作用:

@projects = Project.where("project_name like ?", "Fox")

如何进行搜索,返回名称中包含“Fox”字样的所有对象?

4 个答案:

答案 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所说