mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
default scope merge where clauses [#5488 state:resolved]
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user