在Rails中的精确术语搜索

时间:2017-05-21 13:35:07

标签: ruby-on-rails ruby search

我正在尝试构建基本搜索,其中只有整个确切的搜索字词显示结果。目前,它显示基于单个单词的结果。

以下是模型中的代码:

def search
  find(:all, :conditions => ['term' == "%#{search}%"])
end

提前抱歉。我对铁杆很新!

谢谢。

2 个答案:

答案 0 :(得分:2)

"%#{search}%"中删除%,以便它"#{search}"

%是一个通配符,匹配包含该单词的每个结果。所以"%tea%"例如会匹配撕裂,nestea和蒸汽,而这不是你想要的。

这应该产生完全匹配:

def search find(:all, :conditions => ['term' == "#{search}"]) end

答案 1 :(得分:1)

您的代码由于多种原因而无法正常工作。

  1. 您不会将任何值传递给该方法。因此search始终为nil
  2. ['term' == "%#{search}%"]条件没有多大意义,因为 - 如前所述 - search未定义,因此条件与['term' == "%%"]相同。字符串term不等于%%,因此整个条件基本上是:[false]
  3. Rails 5.0对查询使用不同的语法。您使用的语法非常陈旧,不再起作用。
  4. 我会做这样的事情:

    # in your model
    scope :search, -> (q) { 
      q.present? ? where("column_name LIKE :query", query: "%#{q}%") :none 
    }
    
    # in your controller
    def set_index 
      @b = Best.search(params[:search]).order(:cached_weighted_score => :desc)
    end