使用meta_search实现搜索
潘国源
2023-12-01
这个搜索还是比较好的,能实现多个条件,单个条件查询,能满足大部分开发的需求
github地址https://github.com/activerecord-hackery/meta_search
开发这个gem的团队推出了改进型,等找到在上传吧
(1)gem "meta_search"
(2)在controller里面的语法
@search = Project.metasearch(params[:search])
@projects = @search.where(:check => '1').order('id DESC').page(params[:page]).per(20),通过metasearch方法来实现元搜索,也即模糊的形式。
(3)页面,为了方面扩展一般是把搜索作为一个模板,_search.html.erb这样在模板页面就可以方便的添加多个条件。
<%= form_for @search, :url => projects_path, :html => {:method => :get, :class => "form-search"} do |f| %>
<div class="conditions">
<span class="filter_case_name">项目名称:</span><%= f.text_field :name_contains, class:"filter_text"%>
<span class="filter_case_name">项目性质:</span>
<select name="search[project_kind_name_contains]" class="publicselect w240">
<option value>请选择</option>
<% ProjectKind.where("state='1'").each do |kind| %>
<% if @search.try(:project_kind_name_contains) == kind.name %>
<option value=<%= kind.name %> selected><%= kind.name %></option>
<% elsif %>
<option value=<%= kind.name %>><%= kind.name %></option>
<% end %>
<% end -%>
</select>
<%= render "/search_bottom", :f => f %>
</div>
</div>
</div>
<% end %>
在github里面我们知道运行bundle install之后就会获得很多方法自己去找合适的。我用得比较多点还是contains,如果有ralation关系的话也可以,我找项目地址的时候area_pcc_names_starts_with, project类里面有belongs_to :area也就是commentable_article_type_body_or_commentable_post_type_body_contains关系在前,然后进入关系这个模型,之后在找相应的字段。一般都是从belongs_to一方开始。
想说的是这里的选择下拉框的方式,给name包裹一个search方式,然后取对应模型的字段contains这里的project_kind是一个模型。