使用meta_search实现搜索

这个搜索还是比较好的,能实现多个条件,单个条件查询,能满足大部分开发的需求
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是一个模型。
key = {'META_ALT_LEFT_ON': 16, 'META_ALT_MASK': 50, 'META_ALT_ON': 2, 'META_ALT_RIGHT_ON': 32, 'META_CAPS_LOCK_ON': 1048576, 'META_CTRL_LEFT_ON': 8192, 'META_CTRL_MASK': 28672, 'META_CTRL_ON': 4096, 'META_CTRL_RIGHT_ON': 16384, 'META_FUNCTION_ON': 8, 'META_META_LEFT_ON': 131072, 'META_META_MASK': 458752, 'META_META_ON': 65536, 'META_META_RIGHT_ON': 262144, 'META_NUM_LOCK_ON': 2097152, 'META_SCROLL_LOCK_ON': 4194304, 'META_SHIFT_LEFT_ON': 64, 'META_SHIFT_MASK': 193, 'META_SHIFT_ON': 1, 'META_SHIFT_RIGHT_ON': 128, 'META_SYM_ON': 4, 'KEYCODE_APOSTROPHE': 75, 'KEYCODE_AT': 77, 'KEYCODE_BACKSLASH': 73, 'KEYCODE_COMMA': 55, 'KEYCODE_EQUALS': 70, 'KEYCODE_GRAVE': 68, 'KEYCODE_LEFT_BRACKET': 71, 'KEYCODE_MINUS': 69, 'KEYCODE_PERIOD': 56, 'KEYCODE_PLUS': 81, 'KEYCODE_POUND': 18, 'KEYCODE_RIGHT_BRACKET': 72, 'KEYCODE_SEMICOLON': 74, 'KEYCODE_SLASH': 76, 'KEYCODE_STAR': 17, 'KEYCODE_SPACE': 62, 'KEYCODE_TAB': 61, 'KEYCODE_ENTER': 66, 'KEYCODE_ESCAPE': 111, 'KEYCODE_CAPS_LOCK': 115, 'KEYCODE_CLEAR': 28, 'KEYCODE_PAGE_DOWN': 93, 'KEYCODE_PAGE_UP': 92, 'KEYCODE_SCROLL_LOCK': 116, 'KEYCODE_MOVE_END': 123, 'KEYCODE_MOVE_HOME': 122, 'KEYCODE_INSERT': 124, 'KEYCODE_SHIFT_LEFT': 59, 'KEYCODE_SHIFT_RIGHT': 60, 'KEYCODE_F1': 131, 'KEYCODE_F2': 132, 'KEYCODE_F3': 133, 'KEYCODE_F4': 134, 'KEYCODE_F5': 135, 'KEYCODE_F6': 136, 'KEYCODE_F7': 137, 'KEYCODE_F8': 138, 'KEYCODE_F9': 139, 'KEYCODE_F10': 140, 'KEYCODE_F11': 141, 'KEYCODE_F12': 142, 'KEYCODE_BACK': 4, 'KEYCODE_CALL': 5, 'KEYCODE_ENDCALL': 6, 'KEYCODE_CAMERA': 27, 'KEYCODE_FOCUS': 80, 'KEYCODE_VOLUME_UP': 24, 'KEYCODE_VOLUME_DOWN': 25, 'KEYCODE_VOLUME_MUTE': 164, 'KEYCODE_MENU': 82, 'KEYCODE_HOME': 3, 'KEYCODE_POWER': 26, 'KEYCODE_SEARCH': 84, 'KEYCODE_NOTIFICATION': 83, 'KEYCODE_NUM': 78, 'KEYCODE_SYM': 63, 'KEYCODE_SETTINGS': 176, 'KEYCODE_DEL': 67, 'KEYCODE_FORWARD_DEL': 112, 'KEYCODE_NUMPAD_0': 144, 'KEYCODE_NUMPAD_1': 145, 'KEYCODE_NUMPAD_2': 146, 'KEYCODE_NUMPAD_3': 147, 'KEYCODE_NUMPAD_4': 148, 'KEYCODE_NUMPAD_5': 149, 'KEYCODE_NUMPAD_6': 150, 'KEYCODE_NUMPAD_7': 151, 'KEYCODE_NUMPAD_8': 152, 'KEYCODE_NUMPAD_9': 153, 'KEYCODE_NUMPAD_ADD': 157, 'KEYCODE_NUMPAD_COMMA': 159, 'KEYCODE_NUMPAD_DIVIDE': 154, 'KEYCODE_NUMPAD_DOT': 158, 'KEYCODE_NUMPAD_EQUALS': 161, 'KEYCODE_NUMPAD_LEFT_PAREN': 162, 'KEYCODE_NUMPAD_MULTIPLY': 155, 'KEYCODE_NUMPAD_RIGHT_PAREN': 163, 'KEYCODE_NUMPAD_SUBTRACT': 156, 'KEYCODE_NUMPAD_ENTER': 160, 'KEYCODE_NUM_LOCK': 143, 'KEYCODE_MEDIA_FAST_FORWARD': 90, 'KEYCODE_MEDIA_NEXT': 87, 'KEYCODE_MEDIA_PAUSE': 127, 'KEYCODE_MEDIA_PLAY': 126, 'KEYCODE_MEDIA_PLAY_PAUSE': 85, 'KEYCODE_MEDIA_PREVIOUS': 88, 'KEYCODE_MEDIA_RECORD': 130, 'KEYCODE_MEDIA_REWIND': 89, 'KEYCODE_MEDIA_STOP': 86, }分别给每一个键值对解析一下意思
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值