Skip to content

Commit 5f796fa

Browse files
author
Steve Polito
committed
Add simple search form to activities#index.
1 parent e57127c commit 5f796fa

File tree

9 files changed

+97
-4
lines changed

9 files changed

+97
-4
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,5 @@ gem 'devise-bootstrapped', github: 'king601/devise-bootstrapped', branch: 'boots
6363
gem "pundit", "~> 2.1"
6464

6565
gem "pagy", "~> 3.8"
66+
67+
gem "ransack", "~> 2.3"

Gemfile.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ GEM
122122
orm_adapter (0.5.0)
123123
pagy (3.8.3)
124124
pg (1.2.3)
125+
polyamorous (2.3.2)
126+
activerecord (>= 5.2.1)
125127
public_suffix (4.0.5)
126128
puma (4.3.5)
127129
nio4r (~> 2.0)
@@ -159,6 +161,11 @@ GEM
159161
rake (>= 0.8.7)
160162
thor (>= 0.20.3, < 2.0)
161163
rake (13.0.1)
164+
ransack (2.3.2)
165+
activerecord (>= 5.2.1)
166+
activesupport (>= 5.2.1)
167+
i18n
168+
polyamorous (= 2.3.2)
162169
rb-fsevent (0.10.4)
163170
rb-inotify (0.10.1)
164171
ffi (~> 1.0)
@@ -245,6 +252,7 @@ DEPENDENCIES
245252
puma (~> 4.1)
246253
pundit (~> 2.1)
247254
rails (~> 6.0.3, >= 6.0.3.2)
255+
ransack (~> 2.3)
248256
sass-rails (>= 6)
249257
selenium-webdriver
250258
sendgrid-ruby (~> 6.3)

app/controllers/activities_controller.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ class ActivitiesController < ApplicationController
33
before_action :set_activity, only: [:show, :edit, :update, :destroy]
44

55
def index
6-
@pagy, @activities = pagy(current_user.activities)
6+
@q = current_user.activities.ransack(params[:q])
7+
@pagy, @activities = pagy(@q.result(distinct: true))
78
end
89

910
def show
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<%= search_form_for @q do |f| %>
2+
<div class="form-group">
3+
<%= f.label :difficulty_eq, "Difficuly" %>
4+
<%= f.collection_select :difficulty_eq, Activity.difficulties.keys.each_with_index.map{ |activity,index| [index, activity.humanize] }, :first, :second, {prompt: true}, class: "custom-select" %>
5+
</div>
6+
<div class="form-group">
7+
<%= f.label :category_eq, "Category" %>
8+
<%= f.collection_select :category_eq, Activity.categories.keys.each_with_index.map{ |activity,index| [index, activity.humanize] }, :first, :second, {prompt: true}, class: "custom-select" %>
9+
</div>
10+
<div class="form-group">
11+
<%= f.label :date_lteq %>
12+
<%= f.date_field :date_lteq, class: "form-control" %>
13+
</div>
14+
<div class="form-group">
15+
<%= f.label :date_gteq %>
16+
<%= f.date_field :date_gteq, class: "form-control" %>
17+
</div>
18+
<div class="form-group">
19+
<%= f.submit class: "btn btn-primary" %>
20+
<%= link_to "Reset", activities_path %>
21+
</div>
22+
<% end %>

app/views/activities/index.html.erb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<%= render "search_form" %>
12
<% unless @activities.empty? %>
23
<div class="table-responsive">
34
<table class="table">
@@ -21,5 +22,9 @@
2122
<%== pagy_bootstrap_nav(@pagy) %>
2223
</div>
2324
<% else %>
24-
<p><%= link_to "Add Your First Activity", new_activity_path %></p>
25+
<% if params[:q].nil? %>
26+
<p><%= link_to "Add Your First Activity", new_activity_path %></p>
27+
<% else %>
28+
<p>No results.</p>
29+
<% end %>
2530
<% end %>

app/views/layouts/application.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<main class="container">
2121
<%= render partial: "shared/flash" %>
2222
<%= yield %>
23+
<%= debug(params) %>
2324
</main>
2425
</body>
2526
</html>

test/fixtures/action_text/rich_texts.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22
# record: name_of_fixture (ClassOfFixture)
33
# name: content
44
# body: <p>In a <i>million</i> stars!</p>
5+
6+
confirmed_user_with_searchable_activity_text:
7+
record: confirmed_user_with_searchable_activity_4 (Activity)
8+
name: description
9+
body: <p>In a <i>million</i> stars!</p>

test/fixtures/activities.yml

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,48 @@ another_confirmed_user_activity_<%= i %>:
2020
seconds: <%= rand(1..59) %>
2121
distance: <%= rand(1..26) %>
2222
unit: miles
23-
<% end %>
23+
<% end %>
24+
25+
confirmed_user_with_searchable_activity_1:
26+
date: <%= Time.zone.now %>
27+
user: confirmed_user_with_searchable_activities
28+
hours: <%= rand(0..2) %>
29+
minutes: <%= rand(1..59) %>
30+
seconds: <%= rand(1..59) %>
31+
distance: <%= rand(1..26) %>
32+
unit: miles
33+
difficulty: easy
34+
category: run
35+
36+
confirmed_user_with_searchable_activity_2:
37+
date: <%= 1.month.ago %>
38+
user: confirmed_user_with_searchable_activities
39+
hours: <%= rand(0..2) %>
40+
minutes: <%= rand(1..59) %>
41+
seconds: <%= rand(1..59) %>
42+
distance: <%= rand(1..26) %>
43+
unit: miles
44+
difficulty: moderate
45+
category: long_run
46+
47+
confirmed_user_with_searchable_activity_3:
48+
date: <%= 1.month.from_now %>
49+
user: confirmed_user_with_searchable_activities
50+
hours: <%= rand(0..2) %>
51+
minutes: <%= rand(1..59) %>
52+
seconds: <%= rand(1..59) %>
53+
distance: <%= rand(1..26) %>
54+
unit: miles
55+
difficulty: hard
56+
category: workout
57+
58+
confirmed_user_with_searchable_activity_4:
59+
date: <%= 1.year.ago %>
60+
user: confirmed_user_with_searchable_activities
61+
hours: <%= rand(0..2) %>
62+
minutes: <%= rand(1..59) %>
63+
seconds: <%= rand(1..59) %>
64+
distance: <%= rand(1..26) %>
65+
unit: miles
66+
difficulty: hard
67+
category: race

test/fixtures/users.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,9 @@ confirmed_user_with_activities:
2323
another_confirmed_user_with_activities:
2424
email: another_confirmed_user_with_activities@example.com
2525
confirmed_at: <%= Time.zone.now %>
26-
encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
26+
encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
27+
28+
confirmed_user_with_searchable_activities:
29+
email: confirmed_user_with_searchable_activities@example.com
30+
confirmed_at: <%= Time.zone.now %>
31+
encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>

0 commit comments

Comments
 (0)