2017-05-21 64 views
1

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

下面是从模型代码:

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

对不起提前。我对铁轨很陌生!

谢谢。

+1

试试'找到(:全部:条件=> [ '术语' == “#{}搜索”])' – Pavan

+0

Rails的什么版本你使用? – spickermann

+0

我正在使用Rails 5.0.0 – TWill24

回答

1

"%#{search}%"中删除%,因此它是"#{search}"

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

这应该产生一个精确匹配:

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

+0

感谢您的支持,但我仍然遇到了麻烦。例如,如果我搜索单个字母“a”或示例,那么每个列表中都会显示名称中带有字母“a”的所有列表。 – TWill24

+1

它看起来像我的def搜索没有任何出于某种原因的影响。我删除了全部内容,并且我仍然得到相同的结果。 下面是从视图中的代码: '<%= form_tag root_path,:method =>'get',:class =>“input- group-lg“do%> <%= text_field_tag:search,params [:search],remote:true,:class =>”form-control“,:placeholder =>”Search for the best ...“,: autofocus => true%<%= submit_tag“Search”,:name => nil,remote:true,:class =>“btn search-btn btn-lg”%>'' – TWill24

1

您的代码不会有几个原因的工作。

  1. 您不会将任何值传递给该方法。因此search将始终为nil
  2. ['term' == "%#{search}%"]条件没什么意义,因为 - 正如我之前所说 - search未定义,因此条件将与['term' == "%%"]相同。字符串term不等于%%,因此整个条件基本上是:[false]
  3. Rails 5.0对查询使用不同的语法。你使用的语法很旧,不再适用。

我会做这样的事情:

# 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