本篇教程基于自己的一个小项目,用户可以搜索网站上其他用户发表过的文章。
第一歩:
安装gem ransack
ransack会用数据库的LIKE语法来做搜寻,虽然比较方便,但它会依次检查资料是否符合,而不会使用数据库的索引。如果数据比较庞大的话,利用ransack将不会是一个好的选择。这时候我们就可以安装专门的全文搜索引擎,例如Elasticsearch
1 | + gem 'ransack' |
$ bundle
,重启 rails s
第二歩
controller与config的设定
1、设置路由
1 | Rails.application.routes.draw do |
第三歩
views的设定
1、导航栏的显示
1 | <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
执行$ touch app/views/posts/_search_bar.html.erb
,并编辑1
2
3
4
5
6
7
8
9
10
11
12
13
14 <div class="row">
<div class="col-sm-9 col-lg-8 col-lg-offset-2">
<%= form_tag search_posts_path, :class => "posts-search-form", :method => :get do %>
<div class="input-group">
<input type="text" class="form-control search-bar-input" name="q" value="<%= params[:q] %>" placeholder="关键词">
<span class="input-group-btn">
<button type="submit" class="btn btn-default search-bar-submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</span>
</div>
<% end %>
</div>
</div>
2.搜索反馈页面
新增 app/views/posts/search.html.erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33<div class="minHeight1000 bg-gray">
<div class="search-page w1200 pt30 bc">
<% if @posts.present? %>
<h5 class="collection search-count">已为您找到<%= @posts.count %>篇相关文章</h5>
<% else %>
<p class="tc mt100">未搜索到任何文章,要不换个关键词试试?</p>
<% end %>
</div>
<div class="container">
<% @posts.each do |post| %>
<div class="panel panel-default">
<div class="panel-body">
<%= post.title %>
<br/>
<br/>
<span id="psot-thumbsup-<%= post.id%>" class=" label label-success"><%= post.likes.count%>👍</span>
<div class="text-right">
<% if !current_user.is_collect_of?(post) %>
<%= link_to("收藏", collect_post_path(post), method: :post, class: "btn btn-sm") %>
<% else %>
<%= link_to("取消收藏", uncollect_post_path(post), method: :post, class: "btn btn-sm") %>
<% end %>
</div>
</div>
</div>
<% end %>
</div>
</div>
效果图