ransack 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -4
- data/CONTRIBUTING.md +12 -4
- data/Gemfile +4 -5
- data/README.md +160 -55
- data/lib/ransack.rb +1 -1
- data/lib/ransack/adapters/active_record/3.0/context.rb +16 -0
- data/lib/ransack/adapters/active_record/3.1/context.rb +24 -0
- data/lib/ransack/adapters/active_record/base.rb +6 -0
- data/lib/ransack/adapters/active_record/context.rb +49 -1
- data/lib/ransack/configuration.rb +23 -6
- data/lib/ransack/constants.rb +46 -45
- data/lib/ransack/context.rb +19 -2
- data/lib/ransack/helpers/form_builder.rb +5 -4
- data/lib/ransack/helpers/form_helper.rb +34 -14
- data/lib/ransack/locale/hu.yml +70 -0
- data/lib/ransack/locale/nl.yml +70 -0
- data/lib/ransack/nodes/attribute.rb +2 -2
- data/lib/ransack/nodes/condition.rb +29 -12
- data/lib/ransack/nodes/grouping.rb +6 -6
- data/lib/ransack/nodes/node.rb +1 -1
- data/lib/ransack/nodes/value.rb +1 -1
- data/lib/ransack/predicate.rb +4 -5
- data/lib/ransack/ransacker.rb +1 -1
- data/lib/ransack/search.rb +39 -13
- data/lib/ransack/translate.rb +7 -8
- data/lib/ransack/version.rb +1 -1
- data/ransack.gemspec +5 -5
- data/spec/ransack/adapters/active_record/base_spec.rb +78 -35
- data/spec/ransack/adapters/active_record/context_spec.rb +58 -15
- data/spec/ransack/configuration_spec.rb +18 -18
- data/spec/ransack/dependencies_spec.rb +1 -1
- data/spec/ransack/helpers/form_builder_spec.rb +29 -29
- data/spec/ransack/helpers/form_helper_spec.rb +14 -1
- data/spec/ransack/nodes/condition_spec.rb +21 -2
- data/spec/ransack/predicate_spec.rb +49 -9
- data/spec/ransack/search_spec.rb +178 -143
- data/spec/ransack/translate_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/schema.rb +26 -21
- metadata +15 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce6d8c3f3a255efe1c665afc046f8b03c5ff907f
|
4
|
+
data.tar.gz: cca91cd37e10bbcf3c69df6553a4b09cdfc606d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7d39c9fa75f48bcf996e04050b188f1f3c5e47c1ee5f8edd85deb4fdd6193da986d88230b781f8095559db691e1f8ba7d73034107565a3eecc35bf259b509bf
|
7
|
+
data.tar.gz: 3a0a64c7295ccc4fe744a568db56ad24dea62e52f325e9edf750cb729b08ec33f1fcd47bd4dce6d6ee1f53cd0a9639bbd7952dc175908b5b1dc76ee504c317ef
|
data/.travis.yml
CHANGED
data/CONTRIBUTING.md
CHANGED
@@ -5,8 +5,8 @@ Ransack is an open source project and we encourage contributions.
|
|
5
5
|
When filing an issue on the Ransack project, please provide these details:
|
6
6
|
|
7
7
|
* A comprehensive list of steps to reproduce the issue.
|
8
|
-
* The version of Ransack *and* the version of Rails.
|
9
|
-
* Any relevant stack traces ("Full trace" preferred)
|
8
|
+
* The version of Ransack *and* the version of Rails and Ruby.
|
9
|
+
* Any relevant stack traces ("Full trace" preferred).
|
10
10
|
|
11
11
|
In 99% of cases, this information is enough to determine the cause and
|
12
12
|
solution to the problem that is being described.
|
@@ -20,6 +20,10 @@ if the information requested is provided.
|
|
20
20
|
We gladly accept pull requests to fix bugs and, in some circumstances, add new
|
21
21
|
features to Ransack.
|
22
22
|
|
23
|
+
Before issuing a pull request, please make sure that all specs are passing,
|
24
|
+
that any new features have test coverage, and that anything that breaks
|
25
|
+
backward compatibility has a very good reason for doing so.
|
26
|
+
|
23
27
|
Here's a quick guide:
|
24
28
|
|
25
29
|
1. Fork the repo.
|
@@ -38,7 +42,9 @@ a test!
|
|
38
42
|
|
39
43
|
5. Push to your fork and submit a pull request. If the changes will apply
|
40
44
|
cleanly to the latest stable branches and master branch, you will only need
|
41
|
-
to submit one pull request.
|
45
|
+
to submit one pull request. If the pull request only contains documentation
|
46
|
+
changes, please add `[skip ci]` to the commit message so that the Travis test
|
47
|
+
suite does not needlessly run.
|
42
48
|
|
43
49
|
At this point you're waiting on us. We like to at least comment on, if not
|
44
50
|
accept, pull requests within three business days (and, typically, one business
|
@@ -55,11 +61,13 @@ taken straight from the Ruby on Rails guide:
|
|
55
61
|
Syntax:
|
56
62
|
|
57
63
|
* Two spaces, no tabs.
|
64
|
+
* 80 characters per line.
|
58
65
|
* No trailing whitespace. Blank lines should not have any space.
|
59
66
|
* Prefer &&/|| over and/or.
|
60
67
|
* `MyClass.my_method(my_arg)` not `my_method( my_arg )` or my_method my_arg.
|
61
68
|
* `a = b` and not `a=b`.
|
62
|
-
* `a_method { |block| ... }` and not `a_method { | block | ... }`
|
69
|
+
* `a_method { |block| ... }` and not `a_method { | block | ... }` or
|
70
|
+
`a_method{|block| ...}`.
|
63
71
|
* Follow the conventions you see used in the source already.
|
64
72
|
|
65
73
|
And in case we didn't emphasize it enough: we love tests!
|
data/Gemfile
CHANGED
@@ -5,23 +5,22 @@ gem 'rake'
|
|
5
5
|
|
6
6
|
rails = ENV['RAILS'] || '4-1-stable'
|
7
7
|
|
8
|
-
gem 'polyamorous', '~> 1.
|
8
|
+
gem 'polyamorous', '~> 1.1'
|
9
9
|
|
10
10
|
case rails
|
11
11
|
when /\// # A path
|
12
12
|
gem 'activesupport', path: "#{rails}/activesupport"
|
13
|
-
gem 'activemodel', path: "#{rails}/activemodel"
|
14
13
|
gem 'activerecord', path: "#{rails}/activerecord"
|
15
|
-
gem 'actionpack', path: "#{rails}/
|
14
|
+
gem 'actionpack', path: "#{rails}/actionpack"
|
16
15
|
when /^v/ # A tagged version
|
17
|
-
git 'git://github.com/rails/rails.git', tag
|
16
|
+
git 'git://github.com/rails/rails.git', :tag => rails do
|
18
17
|
gem 'activesupport'
|
19
18
|
gem 'activemodel'
|
20
19
|
gem 'activerecord'
|
21
20
|
gem 'actionpack'
|
22
21
|
end
|
23
22
|
else
|
24
|
-
git 'git://github.com/rails/rails.git', branch
|
23
|
+
git 'git://github.com/rails/rails.git', :branch => rails do
|
25
24
|
gem 'activesupport'
|
26
25
|
gem 'activemodel'
|
27
26
|
gem 'activerecord'
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ and maintained by [Ryan Bigg](http://twitter.com/ryanbigg),
|
|
12
12
|
[Jon Atack](http://twitter.com/jonatack) and a great group of [contributors](https://github.com/activerecord-hackery/ransack/graphs/contributors).
|
13
13
|
While it supports many of the same features as MetaSearch, its underlying
|
14
14
|
implementation differs greatly from MetaSearch,
|
15
|
-
and
|
15
|
+
and backwards compatibility is not a design goal.
|
16
16
|
|
17
17
|
Ransack enables the creation of both simple and
|
18
18
|
[advanced](http://ransack-demo.herokuapp.com/users/advanced_search)
|
@@ -25,28 +25,43 @@ instead.
|
|
25
25
|
|
26
26
|
## Getting started
|
27
27
|
|
28
|
-
|
28
|
+
Because ActiveRecord has been evolving quite a bit, your friendly Ransack is
|
29
|
+
available in several flavors! Take your pick:
|
30
|
+
|
31
|
+
In your Gemfile, for the last officially released gem compatible with Rails
|
32
|
+
3.x, 4.0 and 4.1 (for Rails 4.2, use the dedicated `rails-4.2` branch described
|
33
|
+
below for now):
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
gem 'ransack'
|
37
|
+
```
|
38
|
+
|
39
|
+
Or if you want to use the latest updates on the Ransack master branch:
|
29
40
|
|
30
41
|
```ruby
|
31
|
-
gem
|
42
|
+
gem 'ransack', github: 'activerecord-hackery/ransack'
|
32
43
|
```
|
33
44
|
|
34
|
-
|
45
|
+
If you are using Rails 4.1, you may prefer the dedicated [Rails 4.1 branch](https://github.com/activerecord-hackery/ransack/tree/rails-4.1) which
|
46
|
+
contains the latest updates, supports only 4.1, and is lighter and somewhat
|
47
|
+
faster:
|
35
48
|
|
36
49
|
```ruby
|
37
|
-
gem
|
50
|
+
gem 'ransack', github: 'activerecord-hackery/ransack', branch: 'rails-4.1'
|
38
51
|
```
|
39
52
|
|
40
|
-
|
53
|
+
Similarly, if you are using Rails 4.0, you may prefer the dedicated [Rails 4 branch](https://github.com/activerecord-hackery/ransack/tree/rails-4) for the
|
54
|
+
same reasons:
|
41
55
|
|
42
56
|
```ruby
|
43
|
-
gem
|
57
|
+
gem 'ransack', github: 'activerecord-hackery/ransack', branch: 'rails-4'
|
44
58
|
```
|
45
59
|
|
46
|
-
|
60
|
+
Last but definitely not least, an experimental [Rails 4.2 branch](https://github.com/activerecord-hackery/ransack/tree/rails-4.2) is
|
61
|
+
available for those on the edge:
|
47
62
|
|
48
63
|
```ruby
|
49
|
-
gem
|
64
|
+
gem 'ransack', github: 'activerecord-hackery/ransack', branch: 'rails-4.2'
|
50
65
|
```
|
51
66
|
|
52
67
|
## Usage
|
@@ -55,33 +70,35 @@ Ransack can be used in one of two modes, simple or advanced.
|
|
55
70
|
|
56
71
|
### Simple Mode
|
57
72
|
|
58
|
-
This mode works much like MetaSearch, for those of you who are familiar with
|
59
|
-
requires very little setup effort.
|
73
|
+
This mode works much like MetaSearch, for those of you who are familiar with
|
74
|
+
it, and requires very little setup effort.
|
60
75
|
|
61
76
|
If you're coming from MetaSearch, things to note:
|
62
77
|
|
63
|
-
1. The default param key for search params is now `:q`, instead of `:search`.
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
78
|
+
1. The default param key for search params is now `:q`, instead of `:search`.
|
79
|
+
This is primarily to shorten query strings, though advanced queries (below)
|
80
|
+
will still run afoul of URL length limits in most browsers and require a
|
81
|
+
switch to HTTP POST requests. This key is [configurable]
|
82
|
+
(https://github.com/activerecord-hackery/ransack/wiki/Configuration).
|
68
83
|
|
69
|
-
2. `form_for` is now `search_form_for`, and validates that a Ransack::Search
|
70
|
-
|
84
|
+
2. `form_for` is now `search_form_for`, and validates that a Ransack::Search
|
85
|
+
object is passed to it.
|
71
86
|
|
72
|
-
3. Common ActiveRecord::Relation methods are no longer delegated by the
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
87
|
+
3. Common ActiveRecord::Relation methods are no longer delegated by the
|
88
|
+
search object. Instead, you will get your search results (an
|
89
|
+
ActiveRecord::Relation in the case of the ActiveRecord adapter) via a call to
|
90
|
+
`Search#result`. If passed `distinct: true`, `result` will generate a `SELECT
|
91
|
+
DISTINCT` to avoid returning duplicate rows, even if conditions on a join
|
92
|
+
would otherwise result in some.
|
77
93
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
94
|
+
Please note that for many databases, a sort on an associated table's columns
|
95
|
+
will result in invalid SQL with `distinct: true` -- in those cases, you're on
|
96
|
+
your own, and will need to modify the result as needed to allow these queries
|
97
|
+
to work. Thankfully, 9 times out of 10, sort against the search's base is
|
98
|
+
sufficient, though, as that's generally what's being displayed on your
|
99
|
+
results page.
|
83
100
|
|
84
|
-
In your controller
|
101
|
+
####In your controller
|
85
102
|
|
86
103
|
```ruby
|
87
104
|
def index
|
@@ -89,40 +106,68 @@ def index
|
|
89
106
|
@people = @q.result(distinct: true)
|
90
107
|
end
|
91
108
|
```
|
109
|
+
or without `distinct:true`, for sorting on an associated table's columns (in
|
110
|
+
this example, with preloading each Person's Articles and pagination):
|
92
111
|
|
93
|
-
|
112
|
+
```ruby
|
113
|
+
def index
|
114
|
+
@q = Person.search(params[:q])
|
115
|
+
@people = @q.result.includes(:articles).page(params[:page])
|
116
|
+
end
|
117
|
+
```
|
118
|
+
|
119
|
+
####In your view
|
120
|
+
|
121
|
+
The two primary Ransack view helpers are `search_form_for` and `sort_link`,
|
122
|
+
which are defined in
|
123
|
+
[Ransack::Helpers::FormHelper](lib/ransack/helpers/form_helper.rb).
|
124
|
+
|
125
|
+
#####1. Ransack's `search_form_for` helper replaces `form_for` for creating the view search form:
|
94
126
|
|
95
127
|
```erb
|
96
128
|
<%= search_form_for @q do |f| %>
|
97
129
|
<%= f.label :name_cont %>
|
98
|
-
<%= f.
|
130
|
+
<%= f.search_field :name_cont %>
|
99
131
|
<%= f.label :articles_title_start %>
|
100
|
-
<%= f.
|
132
|
+
<%= f.search_field :articles_title_start %>
|
101
133
|
<%= f.submit %>
|
102
134
|
<% end %>
|
103
135
|
```
|
104
136
|
|
105
|
-
`cont` (contains) and `start` (starts with) are just two of the available
|
106
|
-
|
137
|
+
`cont` (contains) and `start` (starts with) are just two of the available
|
138
|
+
search predicates. See [Constants]
|
139
|
+
(https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/constants.rb)
|
140
|
+
for a full list and the [wiki]
|
141
|
+
(https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching)
|
142
|
+
for more information.
|
107
143
|
|
108
|
-
|
144
|
+
The `search_form_for` answer format can be set like this:
|
109
145
|
```erb
|
110
146
|
<%= search_form_for(@q, format: :pdf) do |f| %>
|
111
|
-
...
|
112
|
-
<% end %>
|
113
147
|
|
114
148
|
<%= search_form_for(@q, format: :json) do |f| %>
|
115
|
-
|
116
|
-
|
149
|
+
```
|
150
|
+
|
151
|
+
#####2. Ransack's `sort_link` helper creates table headers that are sortable links:
|
152
|
+
|
153
|
+
```erb
|
154
|
+
<%= content_tag :th, sort_link(@q, :name) %>
|
155
|
+
```
|
156
|
+
Additional options can be passed after the column attribute, like a different
|
157
|
+
column title or a default sort order:
|
158
|
+
|
159
|
+
```erb
|
160
|
+
<%= content_tag :th, sort_link(@q, :name, 'Last Name', default_order: :desc) %>
|
117
161
|
```
|
118
162
|
|
119
163
|
### Advanced Mode
|
120
164
|
|
121
|
-
"Advanced" searches (ab)use Rails' nested attributes functionality in order to
|
122
|
-
complex queries with nested AND/OR groupings, etc. This takes a bit
|
123
|
-
generate some pretty cool search interfaces that put a lot of
|
124
|
-
your users. A notable drawback with these searches is
|
125
|
-
parameter string will typically force you to use
|
165
|
+
"Advanced" searches (ab)use Rails' nested attributes functionality in order to
|
166
|
+
generate complex queries with nested AND/OR groupings, etc. This takes a bit
|
167
|
+
more work but can generate some pretty cool search interfaces that put a lot of
|
168
|
+
power in the hands of your users. A notable drawback with these searches is
|
169
|
+
that the increased size of the parameter string will typically force you to use
|
170
|
+
the HTTP POST method instead of GET. :(
|
126
171
|
|
127
172
|
This means you'll need to tweak your routes...
|
128
173
|
|
@@ -156,7 +201,9 @@ construct much more complex search forms, such as the one on the
|
|
156
201
|
|
157
202
|
### Ransack #search method
|
158
203
|
|
159
|
-
Ransack will try to to make `#search` available in your models, but in the case
|
204
|
+
Ransack will try to to make `#search` available in your models, but in the case
|
205
|
+
that `#search` has already been defined, you can use `#ransack` instead. For
|
206
|
+
example the following would be equivalent:
|
160
207
|
|
161
208
|
```ruby
|
162
209
|
Article.search(params[:q])
|
@@ -196,7 +243,7 @@ end
|
|
196
243
|
class SupervisorsController < ApplicationController
|
197
244
|
def index
|
198
245
|
@search = Supervisor.search(params[:q])
|
199
|
-
@supervisors = @search.result(
|
246
|
+
@supervisors = @search.result.includes(:department, :employees)
|
200
247
|
end
|
201
248
|
end
|
202
249
|
```
|
@@ -206,21 +253,40 @@ end
|
|
206
253
|
```erb
|
207
254
|
<%= search_form_for @search do |f| %>
|
208
255
|
<%= f.label :last_name_cont %>
|
209
|
-
<%= f.
|
256
|
+
<%= f.search_field :last_name_cont %>
|
210
257
|
|
211
258
|
<%= f.label :department_title_cont %>
|
212
|
-
<%= f.
|
259
|
+
<%= f.search_field :department_title_cont %>
|
213
260
|
|
214
261
|
<%= f.label :employees_last_name_cont %>
|
215
|
-
<%= f.
|
262
|
+
<%= f.search_field :employees_last_name_cont %>
|
216
263
|
|
217
264
|
<%= f.submit "search" %>
|
218
265
|
<% end %>
|
266
|
+
...
|
267
|
+
<%= content_tag :table %>
|
268
|
+
<%= content_tag :th, sort_link(@q, :last_name) %>
|
269
|
+
<%= content_tag :th, sort_link(@q, 'departments.title') %>
|
270
|
+
<%= content_tag :th, sort_link(@q, 'employees.last_name') %>
|
271
|
+
<% end %>
|
219
272
|
```
|
220
273
|
|
221
|
-
|
274
|
+
### Using Ransackers to add custom search functions via Arel
|
275
|
+
|
276
|
+
The main premise behind Ransack is to provide access to
|
277
|
+
**Arel predicate methods**. Ransack provides special methods, called
|
278
|
+
_ransackers_, for creating additional search functions via Arel. More
|
279
|
+
information about `ransacker` methods can be found [here in the wiki]
|
280
|
+
(https://github.com/activerecord-hackery/ransack/wiki/Using-Ransackers).
|
281
|
+
Feel free to contribute working `ransacker` code examples to the wiki!
|
282
|
+
|
283
|
+
### Using SimpleForm
|
284
|
+
|
285
|
+
If you want to combine form builders of ransack and SimpleForm, just set the
|
286
|
+
RANSACK_FORM_BUILDER environment variable before Rails started, e.g. in
|
287
|
+
``config/application.rb`` before ``require 'rails/all'`` and of course use
|
288
|
+
``gem 'simple_form'`` in your ``Gemfile``:
|
222
289
|
|
223
|
-
If you want to combine form builders of ransack and SimpleForm, just set the RANSACK_FORM_BUILDER environment variable before Rails started, e.g. in ``config/application.rb`` before ``require 'rails/all'`` and of course use ``gem 'simple_form'`` in your ``Gemfile``:
|
224
290
|
```ruby
|
225
291
|
require File.expand_path('../boot', __FILE__)
|
226
292
|
|
@@ -229,16 +295,55 @@ ENV['RANSACK_FORM_BUILDER'] = '::SimpleForm::FormBuilder'
|
|
229
295
|
require 'rails/all'
|
230
296
|
```
|
231
297
|
|
232
|
-
|
298
|
+
### Authorization
|
299
|
+
|
300
|
+
By default, Ransack exposes search on any model column, so make sure you
|
301
|
+
sanitize your params and only pass the allowed keys. Alternately, you can
|
302
|
+
define these class methods on your models to apply selective authorization
|
303
|
+
based on a given auth object:
|
304
|
+
|
305
|
+
* `def self.ransackable_attributes(auth_object = nil)`
|
306
|
+
* `def self.ransackable_associations(auth_object = nil)`
|
307
|
+
* `def self.ransackable_scopes(auth_object = nil)`
|
308
|
+
* `def self.ransortable_attributes(auth_object = nil)` (for sorting)
|
309
|
+
|
310
|
+
Any values not included in the arrays returned from these methods will be
|
311
|
+
ignored. The auth object should be optional when building the search, and is
|
312
|
+
ignored by default:
|
313
|
+
|
314
|
+
```
|
315
|
+
Employee.search({ salary_gt: 100000 }, { auth_object: current_user })
|
316
|
+
```
|
317
|
+
|
318
|
+
### Scopes
|
319
|
+
|
320
|
+
Searching by scope requires defining a whitelist of `ransackable_scopes` on the
|
321
|
+
model class. By default all class methods (e.g. scopes) are ignored. Scopes
|
322
|
+
will be applied for matching `true` values, or for given values if the scope
|
323
|
+
accepts a value:
|
324
|
+
|
325
|
+
```
|
326
|
+
Employee.search({ active: true, hired_since: '2013-01-01' })
|
327
|
+
```
|
328
|
+
|
329
|
+
### I18n
|
233
330
|
|
234
|
-
Ransack translation files are available in
|
331
|
+
Ransack translation files are available in
|
332
|
+
[Ransack::Locale](lib/ransack/locale). You may also be interested in one of the
|
333
|
+
many translations for Ransack available at
|
334
|
+
http://www.localeapp.com/projects/2999.
|
235
335
|
|
236
336
|
## Contributions
|
237
337
|
|
238
338
|
To support the project:
|
239
339
|
|
240
|
-
* Use Ransack in your apps, and let us know if you encounter anything that's
|
241
|
-
|
340
|
+
* Use Ransack in your apps, and let us know if you encounter anything that's
|
341
|
+
broken or missing. A failing spec is awesome. A pull request with tests that
|
342
|
+
pass is even better! Before filing an issue or pull request, be sure to read
|
343
|
+
the [Contributing Guide](CONTRIBUTING.md).
|
344
|
+
* Spread the word on Twitter, Facebook, and elsewhere if Ransack's been useful
|
345
|
+
to you. The more people who are using the project, the quicker we can find and
|
346
|
+
fix bugs!
|
242
347
|
|
243
348
|
## Copyright
|
244
349
|
|
data/lib/ransack.rb
CHANGED
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
Ransack.configure do |config|
|
12
12
|
Ransack::Constants::AREL_PREDICATES.each do |name|
|
13
|
-
config.add_predicate name, arel_predicate
|
13
|
+
config.add_predicate name, :arel_predicate => name
|
14
14
|
end
|
15
15
|
|
16
16
|
Ransack::Constants::DERIVED_PREDICATES.each do |args|
|
@@ -68,6 +68,22 @@ module Ransack
|
|
68
68
|
.type
|
69
69
|
end
|
70
70
|
|
71
|
+
# All dependent JoinAssociation items used in the search query
|
72
|
+
#
|
73
|
+
def join_associations
|
74
|
+
@join_dependency.join_associations
|
75
|
+
end
|
76
|
+
|
77
|
+
def join_sources
|
78
|
+
raise NotImplementedError,
|
79
|
+
"ActiveRecord 3.0 does not use join_sources or support joining relations with Arel::Join nodes. Use join_associations."
|
80
|
+
end
|
81
|
+
|
82
|
+
def alias_tracker
|
83
|
+
raise NotImplementedError,
|
84
|
+
"ActiveRecord 3.0 does not have an alias tracker"
|
85
|
+
end
|
86
|
+
|
71
87
|
private
|
72
88
|
|
73
89
|
def get_parent_and_attribute_name(str, parent = @base)
|