diff options
author | Emilio Tagua <miloops@gmail.com> | 2010-03-30 10:41:56 -0300 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-03-30 15:36:18 +0200 |
commit | 8d99ec9a4dcef5918c4487a0d94ef0a9622fe8c9 (patch) | |
tree | aeb56a9d16aa9165e2ea5695da43c49da784ce30 | |
parent | 41b45d56553316f175660fe6e2923409adee37e2 (diff) | |
download | rails-8d99ec9a4dcef5918c4487a0d94ef0a9622fe8c9.tar.gz rails-8d99ec9a4dcef5918c4487a0d94ef0a9622fe8c9.tar.bz2 rails-8d99ec9a4dcef5918c4487a0d94ef0a9622fe8c9.zip |
Named scopes shouldn't test equality using to_a if it's not an Array, this was causing records to be loaded before they were needed.
Signed-off-by: José Valim <jose.valim@gmail.com>
-rw-r--r-- | activerecord/lib/active_record/named_scope.rb | 9 | ||||
-rw-r--r-- | activerecord/test/cases/named_scope_test.rb | 12 |
2 files changed, 17 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/named_scope.rb b/activerecord/lib/active_record/named_scope.rb index aac00cc54a..9abf979cd0 100644 --- a/activerecord/lib/active_record/named_scope.rb +++ b/activerecord/lib/active_record/named_scope.rb @@ -167,7 +167,14 @@ module ActiveRecord end def ==(other) - other.respond_to?(:to_ary) ? to_a == other.to_a : false + case other + when Scope + to_sql == other.to_sql + when Relation + other == self + when Array + to_a == other.to_a + end end private diff --git a/activerecord/test/cases/named_scope_test.rb b/activerecord/test/cases/named_scope_test.rb index 40c724b87e..2396ca10b0 100644 --- a/activerecord/test/cases/named_scope_test.rb +++ b/activerecord/test/cases/named_scope_test.rb @@ -374,14 +374,14 @@ class NamedScopeTest < ActiveRecord::TestCase class << Topic def public_method; end public :public_method - + def protected_method; end protected :protected_method - + def private_method; end private :private_method end - + [:public_method, :protected_method, :private_method].each do |reserved_method| assert Topic.respond_to?(reserved_method, true) ActiveRecord::Base.logger.expects(:warn) @@ -407,6 +407,12 @@ class NamedScopeTest < ActiveRecord::TestCase assert_equal topics(:second), approved[0] assert approved.loaded? end + + def test_nested_named_scopes_queries_size + assert_queries(1) do + Topic.approved.by_lifo.replied.written_before(Time.now).all + end + end end class DynamicScopeMatchTest < ActiveRecord::TestCase |