1
0
Fork 0
mirror of https://github.com/activerecord-hackery/ransack.git synced 2022-11-09 13:47:45 -05:00

Update README to point out 2 caveats with scopes and

provide Gemfile info for using branches.

Minor example code change.

[skip ci]
This commit is contained in:
Jon Atack 2014-10-01 23:56:50 +02:00
parent 9568dd48e0
commit cde3e0e6f2
4 changed files with 23 additions and 10 deletions

View file

@ -42,12 +42,18 @@ gem 'ransack', github: 'activerecord-hackery/ransack'
The other branches (`rails-4`, `rails-4.1`, and `rails-4.2`) were each used for
developing and running Ransack with the latest upcoming version of Rails at the
time. They are lighter and somewhat faster-running because they do not have to
time. They are smaller and possibly slightly faster because they do not have to
support previous versions of Rails and Active Record. Once support for that
Rails version is merged from the branch into Ransack master, the branch is no
longer actively maintained -- unless the open source community submits pull
requests to maintain them. You are welcome to do so!
To use one of the branches, for example the `rails-4.1` branch:
```ruby
gem 'ransack', github: 'activerecord-hackery/ransack', branch: 'rails-4.1'
```
## Usage
Ransack can be used in one of two modes, simple or advanced.
@ -407,7 +413,7 @@ scope accepts a value:
```ruby
class Employee < ActiveRecord::Base
scope :active, ->(boolean = true) { (where active: boolean) }
scope :active, ->(boolean = true) { where(active: boolean) }
scope :salary_gt, ->(amount) { where('salary > ?', amount) }
# Scopes are just syntactical sugar for class methods, which may also be used:
@ -434,6 +440,12 @@ Employee.search({ active: true, hired_since: '2013-01-01' })
Employee.search({ salary_gt: 100_000 }, { auth_object: current_user })
```
Scopes are a recent addition to Ransack and currently have 2 caveats: First, if
you are using a scope with associations, for now you'll need to define the
scope in the parent table model, not in the child model. Second, scopes on
arrays of values are not yet working correctly; in this case, it may be better
to use Ransackers instead.
### Grouping queries by OR instead of AND
The default `AND` grouping can be changed to `OR` by adding `m: 'or'` to the

View file

@ -96,8 +96,9 @@ module Ransack
css = ['sort_link', current_dir].compact.join(' ')
html_options[:class] = [css, html_options[:class]].compact.join(' ')
query_hash = {}
query_hash[search.context.search_key] = search_params
.merge(:s => "#{attr_name} #{new_dir}")
query_hash[search.context.search_key] = search_params.merge(
:s => "#{attr_name} #{new_dir}"
)
options.merge!(query_hash)
options_for_url = params.merge options

View file

@ -1,3 +1,3 @@
module Ransack
VERSION = "1.4.1"
VERSION = "1.4.2"
end

View file

@ -71,10 +71,10 @@ module Ransack
}
end
describe '#sort_link desc through association table defined as a symbol' do
describe '#sort_link through association table defined as a symbol' do
subject { @controller.view_context
.sort_link(
Person.search({ :sorts => ['comments_body asc'] }),
Person.search({ :sorts => 'comments_body' }),
:comments_body, :controller => 'people'
)
}
@ -94,8 +94,8 @@ module Ransack
describe '#sort_link through association table defined as a string' do
subject { @controller.view_context
.sort_link(
Person.search({ :sorts => ['comments.body desc'] }),
'comments.body', :controller => 'people'
Person.search({ :sorts => 'comments.body desc' }),
:comments_body, :controller => 'people'
)
}
it {
@ -108,7 +108,7 @@ module Ransack
)
}
it { should match /sort_link desc/ }
it { should match /Comments.body&nbsp;&#9660;/ }
it { should match /Body&nbsp;&#9660;/ }
end
describe '#sort_link works even if search params are a blank string' do