搜索列中部分字符串的活动记录

时间:2014-04-16 16:34:39

标签: ruby-on-rails rails-activerecord

在返回产品搜索结果后,我需要在单个模型期刊上执行搜索。

有没有办法只使用完整字符串的一部分来搜索期刊标题?

def index
    @product_results = Gemgento::Search.products(params[:query])
    @editorial_results = Journal.where("headline LIKE ?", "#{params[:query]}")   
end

例如。说我的最后一个日记对象有标题:"堆栈溢出博客帖子" 如果我用以下方式查询活动记录:

@editorial_results = Journal.where("headline LIKE ?", "stack overflow")

正如我现在所说,它仍然需要在字符串上直接匹配。

通过http://guides.rubyonrails.org/active_record_querying.html搜索似乎这是正确的方法,尽管有sql注入的警告。

有没有办法构建搜索,以便返回最后一个条目? (不使用搜索库?)

4 个答案:

答案 0 :(得分:11)

你错过了通配符'%'在搜索词之前和之后。

def index
   @product_results = Gemgento::Search.products(params[:query])
   @editorial_results = Journal.where("headline LIKE ?", "%#{params[:query]}%")   
end

这意味着查询参数之前和之后都可以有任何内容。

答案 1 :(得分:2)

您需要将%符号添加到SQL查询

def index
    @product_results = Gemgento::Search.products(params[:query])
    @editorial_results = Journal.
      where("headline LIKE :query", { query: "%#{params[:query]}%"})   
end

答案 2 :(得分:1)

您可以使用Journal.where("headline LIKE ?", "%#{params[:query]}%")

来实现此目的

答案 3 :(得分:1)

如果您要进行不区分大小写的搜索,并且正在使用Postgres,请使用ILIKE而不是LIKEJournal.where("headline ILIKE ?", "%#{params[:query]}%")

将其添加到希望使别人节省了我几分钟的沮丧和尴尬的地方,想知道为什么我的小写搜索词没有为大多数单词都大写的标题字段返回任何结果。