From 6931bed1b41ae9d8b5ba4978156211082b873816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Wed, 21 May 2014 12:15:57 -0300 Subject: [PATCH] Revert "Merge pull request #14544 from jefflai2/named_scope_sti" This reverts commit 9a1abedcdeecd9464668695d4f9c1d55a2fd9332, reversing changes made to c72d6c91a7c0c2dc81cc857a1d6db496e84e0065. Conflicts: activerecord/CHANGELOG.md activerecord/test/models/comment.rb This change break integration with activerecord-deprecated_finders so I'm reverting until we find a way to make it work with this gem. --- activerecord/CHANGELOG.md | 11 ----------- activerecord/lib/active_record/scoping.rb | 4 ++-- activerecord/lib/active_record/scoping/named.rb | 8 ++------ activerecord/test/cases/scoping/named_scoping_test.rb | 7 +------ activerecord/test/fixtures/ratings.yml | 10 ---------- activerecord/test/models/comment.rb | 1 - activerecord/test/models/rating.rb | 4 ---- activerecord/test/schema/schema.rb | 2 -- 8 files changed, 5 insertions(+), 42 deletions(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index a37f1ad540..7a03d4f9e1 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -4,17 +4,6 @@ *Lauro Caetano* -* Changed scoped blocks to be executed with `instance_eval` - - Named scopes (i.e. using STI) were previously cached according to - base class so scoped queries made by classes with a common ancestor would - leak. Changed the way scope blocks were called so inheritance rules are - followed during the call and scopes are cached correctly. - - Fixes #13466. - - *Jefferson Lai* - * Change belongs_to touch to be consistent with timestamp updates If a model is set up with a belongs_to: touch relatinoship the parent diff --git a/activerecord/lib/active_record/scoping.rb b/activerecord/lib/active_record/scoping.rb index fca4f1c9d3..3e43591672 100644 --- a/activerecord/lib/active_record/scoping.rb +++ b/activerecord/lib/active_record/scoping.rb @@ -11,11 +11,11 @@ module ActiveRecord module ClassMethods def current_scope #:nodoc: - ScopeRegistry.value_for(:current_scope, self.to_s) + ScopeRegistry.value_for(:current_scope, base_class.to_s) end def current_scope=(scope) #:nodoc: - ScopeRegistry.set_value_for(:current_scope, self.to_s, scope) + ScopeRegistry.set_value_for(:current_scope, base_class.to_s, scope) end end diff --git a/activerecord/lib/active_record/scoping/named.rb b/activerecord/lib/active_record/scoping/named.rb index 826b710e92..49cadb66d0 100644 --- a/activerecord/lib/active_record/scoping/named.rb +++ b/activerecord/lib/active_record/scoping/named.rb @@ -148,13 +148,9 @@ module ActiveRecord extension = Module.new(&block) if block singleton_class.send(:define_method, name) do |*args| - if body.respond_to?(:to_proc) - scope = all.scoping { instance_exec(*args, &body) } - else - # Body is given as an object instead of a block, so invoke call() - scope = all.scoping { body.call(*args) } - end + scope = all.scoping { body.call(*args) } scope = scope.extending(extension) if extension + scope || all end end diff --git a/activerecord/test/cases/scoping/named_scoping_test.rb b/activerecord/test/cases/scoping/named_scoping_test.rb index bfde9448f3..59ec2dd6a4 100644 --- a/activerecord/test/cases/scoping/named_scoping_test.rb +++ b/activerecord/test/cases/scoping/named_scoping_test.rb @@ -2,13 +2,12 @@ require "cases/helper" require 'models/post' require 'models/topic' require 'models/comment' -require 'models/rating' require 'models/reply' require 'models/author' require 'models/developer' class NamedScopingTest < ActiveRecord::TestCase - fixtures :posts, :authors, :topics, :comments, :author_addresses, :ratings + fixtures :posts, :authors, :topics, :comments, :author_addresses def test_implements_enumerable assert !Topic.all.empty? @@ -116,10 +115,6 @@ class NamedScopingTest < ActiveRecord::TestCase assert_equal 1,SpecialPost.containing_the_letter_a.count end - def test_scope_subquery_with_STI - assert_nothing_raised { VerySpecialComment.special_parent(SpecialRating.first).count } - end - def test_has_many_through_associations_have_access_to_scopes assert_not_equal Comment.containing_the_letter_e, authors(:david).comments assert !Comment.containing_the_letter_e.empty? diff --git a/activerecord/test/fixtures/ratings.yml b/activerecord/test/fixtures/ratings.yml index 2b45c5080e..34e208efa3 100644 --- a/activerecord/test/fixtures/ratings.yml +++ b/activerecord/test/fixtures/ratings.yml @@ -2,23 +2,13 @@ normal_comment_rating: id: 1 comment_id: 8 value: 1 - type: Rating special_comment_rating: id: 2 comment_id: 6 value: 1 - type: Rating sub_special_comment_rating: id: 3 comment_id: 12 value: 1 - type: Rating - -special_rating: - id: 4 - comment_id: 10 - value: 1 - type: SpecialRating - special_comment_id: 3 diff --git a/activerecord/test/models/comment.rb b/activerecord/test/models/comment.rb index d5a1231060..15970758db 100644 --- a/activerecord/test/models/comment.rb +++ b/activerecord/test/models/comment.rb @@ -42,7 +42,6 @@ class SubSpecialComment < SpecialComment end class VerySpecialComment < Comment - scope :special_parent, ->(special_rating) { where parent_id: special_rating.special_comment.id } end class CommentThatAutomaticallyAltersPostBody < Comment diff --git a/activerecord/test/models/rating.rb b/activerecord/test/models/rating.rb index 5409230c2e..25a52c4ad7 100644 --- a/activerecord/test/models/rating.rb +++ b/activerecord/test/models/rating.rb @@ -2,7 +2,3 @@ class Rating < ActiveRecord::Base belongs_to :comment has_many :taggings, :as => :taggable end - -class SpecialRating < Rating - belongs_to :special_comment -end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 67ba358843..8c52ad2724 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -598,9 +598,7 @@ ActiveRecord::Schema.define do create_table :ratings, force: true do |t| t.integer :comment_id - t.integer :special_comment_id t.integer :value - t.string :type end create_table :readers, force: true do |t|