rails-simple-search 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -1
- data/lib/sql_handler.rb +6 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 163e11eed3a64c95ca420d49bd6ade5d62bfeaeaff693b3b9586a387f89b7ae1
|
4
|
+
data.tar.gz: adb762be25ea2e2672d400667764728ca051df3dba97604610f4a5fe43f7d64b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5f332112cbb55e5d966c4d0bba3044a19f56b0923ccc7f256b59fdcdee2d0e83d3708db5ffc718910b7fbe241c3f6480e5503be02ceb967603443ae5942dff7
|
7
|
+
data.tar.gz: 765ce655040b6488cb7137fa56afdc9fa3abcee70ca718f6972e0a9f8317ccb794cef9834b071638fc5a96689a22a217fd09c894787ba7d970b6df9a4a0b7ad1
|
data/README.md
CHANGED
@@ -1,10 +1,30 @@
|
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/rails-simple-search.svg)](https://badge.fury.io/rb/rails-simple-search)
|
2
|
+
|
3
|
+
### Table of Contents
|
4
|
+
|
5
|
+
* [What is rails-simple-search?](#what-is-rails-simple-search)
|
6
|
+
|
7
|
+
* [Why rails-simple-search?](#why-rails-simple-search)
|
8
|
+
|
9
|
+
* [Installation](#installation)
|
10
|
+
|
11
|
+
* [Usage](#usage)
|
12
|
+
|
13
|
+
* [How to construct field names](#how-to-construct-field-names)
|
14
|
+
|
15
|
+
* [Demo projects](#demo-projects)
|
16
|
+
|
17
|
+
* [Version history](#version-history)
|
18
|
+
|
19
|
+
* [License](#license)
|
20
|
+
|
1
21
|
## What is rails-simple-search?
|
2
22
|
rails-simple-search is a Ruby gem. It can help Ruby on Rails developers **quickly**
|
3
23
|
implement searching/filtering function against database. If you're not looking
|
4
24
|
for a full-text searching solution, this plugin will most probably **satisfy all**
|
5
25
|
your searching requirement.
|
6
26
|
|
7
|
-
## Why?
|
27
|
+
## Why rails-simple-search?
|
8
28
|
From time to time, I need to build pages to show a list of narrowed down records
|
9
29
|
from a database table by giving some searching criteria on some columns of the
|
10
30
|
table and/or of some referencing tables. Before I implemented this plugin, I usually
|
@@ -67,6 +87,8 @@ The following is how we implement this searching function with rails-simple-sear
|
|
67
87
|
```
|
68
88
|
|
69
89
|
4. Code in views:
|
90
|
+
**Pay attention to the name of the form fields**.
|
91
|
+
|
70
92
|
```
|
71
93
|
<% form_for @search, url => "/xxxxxx", data: {turbo: false} do |f| %>
|
72
94
|
|
@@ -105,6 +127,50 @@ The following is how we implement this searching function with rails-simple-sear
|
|
105
127
|
post "/xxxxxx" => "yyyyyyy#zzzzzz"
|
106
128
|
```
|
107
129
|
|
130
|
+
## How to construct field names
|
131
|
+
1. Let's call the model we're search for is the base model. If you just want to search
|
132
|
+
against any direct fields of the base model, we just use the table field name as the html
|
133
|
+
input field name. For example
|
134
|
+
```
|
135
|
+
"email"
|
136
|
+
```
|
137
|
+
|
138
|
+
2. If you need to search against fields of the base model's association, you can just
|
139
|
+
use the association name and the table field name with a dot "." connecting them. Like this
|
140
|
+
```
|
141
|
+
"address.city"
|
142
|
+
```
|
143
|
+
|
144
|
+
3. You can chain the associations more than 2 layers. For example, we're going to
|
145
|
+
find out the users whose posts have been commented by someone whose first name we happen to know.
|
146
|
+
```
|
147
|
+
"posts.comments.user.first_name"
|
148
|
+
```
|
149
|
+
|
150
|
+
4. Sometimes we need to find out something according to a range of time, or a range of numbers,
|
151
|
+
we can attach "_greater_than", "_greater_than_equal_to", "_less_than", or "_less_than_equal_to".
|
152
|
+
For example, we need to find out the users who birth date is between a range, the field names
|
153
|
+
can be like this
|
154
|
+
```
|
155
|
+
birth_date_greater_than
|
156
|
+
```
|
157
|
+
and
|
158
|
+
```
|
159
|
+
birth_date_greater_than
|
160
|
+
```
|
161
|
+
|
162
|
+
5. Sometimes we need to express the idea of "or", for example, I know roughly a user's name, but
|
163
|
+
not sure if it's her first name or last name, we can do it like this
|
164
|
+
```
|
165
|
+
first_name_or_last_name
|
166
|
+
```
|
167
|
+
|
168
|
+
6. We can even use the "or" relation with association fields. For example
|
169
|
+
```
|
170
|
+
posts.comments.user.first_name_or_posts.comments.user.last_name
|
171
|
+
```
|
172
|
+
|
173
|
+
|
108
174
|
## Demo projects
|
109
175
|
There are 2 demo projects for this gem, one for [Rails 5](https://github.com/yzhanginwa/demo_app_for_rails_simple_search)
|
110
176
|
and one for [Rails 7](https://github.com/yzhanginwa/rails_simple_search_demo). You are encouraged to clone them to your local and
|
data/lib/sql_handler.rb
CHANGED
@@ -80,7 +80,8 @@ module RailsSimpleSearch
|
|
80
80
|
format('A%02d', @joins[table_name][0])
|
81
81
|
end
|
82
82
|
|
83
|
-
def insert_join(base_class, asso_ref)
|
83
|
+
def insert_join(base_class, asso_ref, new_asso_chain)
|
84
|
+
debugger
|
84
85
|
base_table = base_class.table_name
|
85
86
|
asso_table = asso_ref.klass.table_name
|
86
87
|
|
@@ -89,7 +90,7 @@ module RailsSimpleSearch
|
|
89
90
|
return unless @joins[asso_table].nil?
|
90
91
|
|
91
92
|
@join_count += 1
|
92
|
-
base_table_alias =
|
93
|
+
base_table_alias = new_asso_chain ? base_table : table_name_to_alias(base_table)
|
93
94
|
asso_table_alias = format('A%02d', @join_count)
|
94
95
|
|
95
96
|
if asso_ref.belongs_to?
|
@@ -126,9 +127,11 @@ module RailsSimpleSearch
|
|
126
127
|
field = association_fields.pop
|
127
128
|
|
128
129
|
base_class = @model_class
|
130
|
+
new_asso_chain = true
|
129
131
|
until association_fields.empty?
|
130
132
|
association_fields[0] = base_class.reflect_on_association(association_fields[0].to_sym)
|
131
|
-
insert_join(base_class, association_fields[0])
|
133
|
+
insert_join(base_class, association_fields[0], new_asso_chain)
|
134
|
+
new_asso_chain = false
|
132
135
|
base_class = association_fields.shift.klass
|
133
136
|
end
|
134
137
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-simple-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yi Zhang
|
@@ -32,7 +32,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 2.7.0
|
36
36
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|