【问题标题】:Search active record for partial strings in a column在活动记录中搜索列中的部分字符串
【发布时间】:2014-04-16 16:34:38
【问题描述】:

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

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

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

例如。假设我的最后一个日志对象的标题是:“stack overflow blogpost” 如果我查询活动记录:

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

正如我现在所拥有的,它仍然需要对字符串进行直接匹配。

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

有没有一种方法可以构造搜索以便返回最后一个条目? (不使用搜索库?)

【问题讨论】:

  • 试试where("headline LIKE ?", "%stack overflow%")

标签: ruby-on-rails rails-activerecord


【解决方案1】:

您在搜索词前后缺少通配符“%”。

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

这意味着任何东西都可以出现在查询参数之前和之后。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以通过Journal.where("headline LIKE ?", "%#{params[:query]}%") 实现此目的

      【讨论】:

        【解决方案4】:

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

        添加此内容是为了希望能帮助其他人免去我刚才遇到的几分钟的挫败感和尴尬,想知道为什么我的小写搜索词没有为大多数单词大写的标题字段返回任何结果。

        【讨论】:

          猜你喜欢
          • 2017-09-02
          • 1970-01-01
          • 1970-01-01
          • 2012-08-16
          • 1970-01-01
          • 2019-05-29
          • 1970-01-01
          • 1970-01-01
          • 2011-08-10
          相关资源
          最近更新 更多