Skip to content

Commit 71d6513

Browse files
committed
Create search controller + reuslts page
1 parent 393605c commit 71d6513

File tree

8 files changed

+57
-4
lines changed

8 files changed

+57
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Place all the styles related to the Search controller here.
2+
// They will automatically be included in application.css.
3+
// You can use Sass (SCSS) here: http://sass-lang.com/

app/controllers/search_controller.rb

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class SearchController < ApplicationController
2+
def results
3+
@results = PgSearch.multisearch(params[:q]).page(params[:page])
4+
end
5+
end

app/helpers/search_helper.rb

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module SearchHelper
2+
def cache_key_for_search(results)
3+
[PgSearch::Document.all.cache_key,
4+
results.current_page,
5+
params[:q]]
6+
end
7+
end

app/models/topic.rb

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ def nillify_empty_slug
2929
self.slug = nil if slug.blank?
3030
end
3131

32+
def body
33+
lessons.first.try(:body)
34+
end
35+
3236
private
3337

3438
def lesson_bodies

app/views/layouts/application.html.erb

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515

1616
<div class="top-bar">
1717
<span class="eff-branding">(logo) A Project of the Electronic Frontier Foundation</span>
18-
<span class="search">
19-
Search&nbsp;
20-
<input type="text">
21-
</span>
18+
<%= form_tag("/search") do %>
19+
<%= search_field_tag :q %>
20+
<%= submit_tag "Search" %>
21+
<% end %>
2222
</div>
2323
<header>
2424
<span class="logo">Logo + Title</span>

app/views/search/results.html.erb

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<h2>Search Results</h2>
2+
3+
<% cache(cache_key_for_search(@results)) do %>
4+
<% @results.each do |result| %>
5+
<div class="card">
6+
<h3><%= link_to result.searchable.name, result.searchable %></h3>
7+
<div class="content">
8+
<%= preview(result.searchable.body) %>
9+
</div>
10+
</div>
11+
<% end %>
12+
<% end %>
13+
14+
<%= paginate @results %>

config/routes.rb

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
resources :lessons, path: "", only: [:show]
1414
end
1515

16+
get "/search", as: :search, to: "search#results"
17+
1618
devise_for :admin_users, ActiveAdmin::Devise.config
1719
ActiveAdmin.routes(self)
1820
end
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
require 'rails_helper'
2+
3+
RSpec.describe SearchController, type: :controller do
4+
5+
describe "GET #results" do
6+
before do
7+
FactoryGirl.create(:blog_post,
8+
name: "a searchable name",
9+
body: "some searchable content")
10+
end
11+
12+
it "returns http success" do
13+
get :results, params: { q: "searchable" }
14+
expect(response).to have_http_status(:success)
15+
end
16+
end
17+
18+
end

0 commit comments

Comments
 (0)