我正在尝试构建基本搜索,其中只有整个搜索字词显示结果。目前它显示基于单词的结果。在Rails中精确搜索术语
下面是从模型代码:
def search
find(:all, :conditions => ['term' == "%#{search}%"])
end
对不起提前。我对铁轨很陌生!
谢谢。
我正在尝试构建基本搜索,其中只有整个搜索字词显示结果。目前它显示基于单词的结果。在Rails中精确搜索术语
下面是从模型代码:
def search
find(:all, :conditions => ['term' == "%#{search}%"])
end
对不起提前。我对铁轨很陌生!
谢谢。
从"%#{search}%"
中删除%,因此它是"#{search}"
。
%
是一个匹配包含该单词的每个结果的通配符。所以"%tea%"
例如会匹配眼泪,nestea和蒸汽,当这不是你想要的。
这应该产生一个精确匹配:
def search find(:all, :conditions => ['term' == "#{search}"]) end
感谢您的支持,但我仍然遇到了麻烦。例如,如果我搜索单个字母“a”或示例,那么每个列表中都会显示名称中带有字母“a”的所有列表。 – TWill24
它看起来像我的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
您的代码不会有几个原因的工作。
search
将始终为nil
。['term' == "%#{search}%"]
条件没什么意义,因为 - 正如我之前所说 - search
未定义,因此条件将与['term' == "%%"]
相同。字符串term
不等于%%
,因此整个条件基本上是:[false]
。我会做这样的事情:
# 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
试试'找到(:全部:条件=> [ '术语' == “#{}搜索”])' – Pavan
Rails的什么版本你使用? – spickermann
我正在使用Rails 5.0.0 – TWill24