Make default_scope work with Relations
This commit is contained in:
parent
c2e57c0bb0
commit
8ff2fb6f3a
|
@ -1236,7 +1236,7 @@ module ActiveRecord #:nodoc:
|
|||
end
|
||||
|
||||
def construct_finder_arel(options = {}, scope = nil)
|
||||
relation = unscoped.apply_finder_options(options)
|
||||
relation = options.is_a?(Hash) ? unscoped.apply_finder_options(options) : unscoped.merge(options)
|
||||
relation = scope.merge(relation) if scope
|
||||
relation
|
||||
end
|
||||
|
@ -1450,7 +1450,8 @@ module ActiveRecord #:nodoc:
|
|||
end
|
||||
|
||||
def scoped_methods #:nodoc:
|
||||
Thread.current[:"#{self}_scoped_methods"] ||= self.default_scoping.dup
|
||||
key = :"#{self}_scoped_methods"
|
||||
Thread.current[key] = Thread.current[key].presence || self.default_scoping.dup
|
||||
end
|
||||
|
||||
def current_scoped_methods #:nodoc:
|
||||
|
|
|
@ -588,7 +588,7 @@ class HasAndBelongsToManyScopingTest< ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
class DefaultScopingTest < ActiveRecord::TestCase
|
||||
fixtures :developers
|
||||
fixtures :developers, :posts
|
||||
|
||||
def test_default_scope
|
||||
expected = Developer.find(:all, :order => 'salary DESC').collect { |dev| dev.salary }
|
||||
|
@ -657,6 +657,12 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|||
received = DeveloperOrderedBySalary.find(:all, :order => 'salary').collect { |dev| dev.salary }
|
||||
assert_equal expected, received
|
||||
end
|
||||
|
||||
def test_default_scope_using_relation
|
||||
posts = PostWithComment.scoped
|
||||
assert_equal 2, posts.count
|
||||
assert_equal posts(:thinking), posts.first
|
||||
end
|
||||
end
|
||||
|
||||
=begin
|
||||
|
|
|
@ -100,3 +100,8 @@ end
|
|||
class SubStiPost < StiPost
|
||||
self.table_name = Post.table_name
|
||||
end
|
||||
|
||||
class PostWithComment < ActiveRecord::Base
|
||||
self.table_name = 'posts'
|
||||
default_scope where("posts.comments_count > 0").order("posts.comments_count ASC")
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue