Merge pull request #208 from pdf/reorder

Reorder results to override orders applied up the chain (eg - scopes)
This commit is contained in:
Ryan Bigg 2013-04-23 21:37:20 -07:00
commit 764eecbb20
5 changed files with 12 additions and 6 deletions

View File

@ -20,7 +20,7 @@ module Ransack
viz = Visitor.new
relation = @object.where(viz.accept(search.base))
if search.sorts.any?
relation = relation.except(:order).order(viz.accept(search.sorts))
relation = relation.except(:order).reorder(viz.accept(search.sorts))
end
opts[:distinct] ? relation.select("DISTINCT #{@klass.quoted_table_name}.*") : relation
end
@ -158,4 +158,4 @@ module Ransack
end
end
end
end
end

View File

@ -18,7 +18,7 @@ module Ransack
viz = Visitor.new
relation = @object.where(viz.accept(search.base))
if search.sorts.any?
relation = relation.except(:order).order(viz.accept(search.sorts))
relation = relation.except(:order).reorder(viz.accept(search.sorts))
end
opts[:distinct] ? relation.select("DISTINCT #{@klass.quoted_table_name}.*") : relation
end

View File

@ -29,7 +29,7 @@ module Ransack
viz = Visitor.new
relation = @object.where(viz.accept(search.base))
if search.sorts.any?
relation = relation.except(:order).order(viz.accept(search.sorts))
relation = relation.except(:order).reorder(viz.accept(search.sorts))
end
opts[:distinct] ? relation.uniq : relation
end
@ -37,4 +37,4 @@ module Ransack
end
end
end
end
end

View File

@ -217,6 +217,11 @@ module Ransack
id_sort.dir.should eq 'desc'
name_sort.dir.should eq 'asc'
end
it 'overrides existing sort' do
@s.sorts = 'id asc'
@s.result.first.id.should eq 1
end
end
describe '#method_missing' do

View File

@ -6,6 +6,7 @@ ActiveRecord::Base.establish_connection(
)
class Person < ActiveRecord::Base
default_scope order('id DESC')
belongs_to :parent, :class_name => 'Person', :foreign_key => :parent_id
has_many :children, :class_name => 'Person', :foreign_key => :parent_id
has_many :articles
@ -108,4 +109,4 @@ module Schema
Comment.make(:body => 'First post!', :article => Article.make(:title => 'Hello, world!'))
end
end
end