我正在建立一个网站,其中有多个表格,详细说明了网站的功能,如汽车池,匹配,对手和注册用户。我添加了一个搜索功能,搜索网站上的匹配,但我不知道如何扩展这个,以便用户可以搜索汽车池详细信息,对手和注册用户。我可能只是重复我对匹配所做的事情,但这似乎效率低下,我确信必须有一种方法可以将所有匹配的信息捕获到输入的搜索词中。
有相当多的代码请耐心等待我 -
这是在matches_contoller.rb文件中:
def search
@search_term = params[:q]
st = "%#{params[:q]}%"
@matches = Match.where("Opponent like ?", st)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @matches }
end
end
我已使用以下代码将_search.html.erb添加到matches文件夹中:
<%= form_tag("/search", :method => "post") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
我已使用以下代码将matches.html.erb添加到matches文件夹中:
<h1>Search Matches Catalog</h1>
<br />
<h3>Searching For: <%= @search_term %></h3>
<table class="catalog">
<% if @matches.length == 0 %>
<br />
<h2>No matches found for this search term!!</h2>
<% end %>
<% @matches.each do |match| %>
<tr>
<td><%= match.opponent %></td>
<td><%= match.game %></td>
<td><%= match.home_away %></td>
<td><%= match.kick_off.strftime("%d/%m/%Y at %I:%M") %></td>
<td><%= match.score %></td>
<td><%= match.result %></td>
</tr>
<% end %>
</table>
<% if session[:login] == 1 %>
<p><%= link_to 'New match', new_match_path %></p>
<% end %>
这已添加到routes.rb文件中:
post '/search' => 'matches#search'
最后,这已添加到application.html.erb文件中:
<div class="searchbox">
<%= render :partial => 'matches/search' %>
</div>
我意识到这有点长篇大论,非常感谢任何建议。
如果有人如此封闭,我很乐意与他人分享我的cloud9开发环境,让他们看看他们是否觉得更容易。
提前致谢,我希望问题很明确。
答案 0 :(得分:0)
我会建议elasticsearch
,它有灵活的高级搜索索引,您可以在其中添加您想要搜索的列,满足您的要求。
一个很棒的elasticsearch
客户端是searckick
。它在elasticsearch DSL
中抽象出所有困难并简化了你的使命。
首先,您需要安装elasticsearch
,然后将gem 'searchkick'
添加到Gemfile
。
如果您使用的是Mac brew install elasticsearch
对于Linux发行版,只需在brew
,apt-get
或Fedora中的ubuntu
中将yum
替换为dnf
。
将searchkick
添加到您的模型
class Match < ActiveRecord::Base
searchkick
end
要控制索引数据,请使用方法search_data
class Match < ActiveRecord::Base
searchkick
def search_data
{
opponents: opponents_data,
details: details
}
end
def opponents_data
self.opponents.pluck(:name).join(',')
end
end
之后运行Match.reindex
,您可以使用Match.search("query")
在各自的文档中详细了解elasticsearch
和searchkick
。 (上面的链接)