default scope merge where clauses [#5488 state:resolved]

This commit is contained in:
Jan
2010-10-12 12:42:09 +08:00
committed by Aaron Patterson
parent dbc5d2694f
commit 21beedf1ff
3 changed files with 19 additions and 0 deletions

View File

@@ -1139,6 +1139,7 @@ MSG
# Article.new.published # => true
# Article.create.published # => true
def default_scope(options = {})
reset_scoped_methods
self.default_scoping << construct_finder_arel(options, default_scoping.pop)
end

View File

@@ -1456,6 +1456,7 @@ class BasicsTest < ActiveRecord::TestCase
UnloadablePost.class_eval do
default_scope order('posts.comments_count ASC')
end
UnloadablePost.scoped_methods # make Thread.current[:UnloadablePost_scoped_methods] not nil
UnloadablePost.unloadable
assert_not_nil Thread.current[:UnloadablePost_scoped_methods]

View File

@@ -393,6 +393,23 @@ class DefaultScopingTest < ActiveRecord::TestCase
assert_equal 100000, klass.first.salary
end
def test_default_scope_called_twice_in_different_place_merges_where_clause
Developer.destroy_all
Developer.create!(:name => "David", :salary => 80000)
Developer.create!(:name => "David", :salary => 100000)
Developer.create!(:name => "Brian", :salary => 100000)
klass = Class.new(Developer)
klass.class_eval do
default_scope where("name = 'David'")
default_scope where("salary = 100000")
end
assert_equal 1, klass.count
assert_equal "David", klass.first.name
assert_equal 100000, klass.first.salary
end
def test_method_scope
expected = Developer.find(:all, :order => 'salary DESC, name DESC').collect { |dev| dev.salary }
received = DeveloperOrderedBySalary.all_ordered_by_name.collect { |dev| dev.salary }