remove deprecated support to preload instance-dependent associaitons.

Addresses ed56e596a0 (commitcomment-9145960)
This commit is contained in:
Yves Senn 2015-01-05 11:44:14 +01:00
parent a076256d63
commit 4ed97979d1
4 changed files with 16 additions and 32 deletions

View File

@ -1,3 +1,7 @@
* Remove deprecated support to preload instnace-dependent associations.
*Yves Senn*
* Remove deprecated support for PostgreSQL ranges with exclusive lower bounds.
*Yves Senn*

View File

@ -343,13 +343,10 @@ module ActiveRecord
return unless scope
if scope.arity > 0
ActiveSupport::Deprecation.warn(<<-MSG.squish)
raise ArgumentError, <<-MSG.squish
The association scope '#{name}' is instance dependent (the scope
block takes an argument). Preloading happens before the individual
instances are created. This means that there is no instance being
passed to the association scope. This will most likely result in
broken or incorrect behavior. Joining, Preloading and eager loading
of these associations is deprecated and will be removed in the future.
block takes an argument). Preloading instance dependent scopes is
not supported.
MSG
end
end

View File

@ -826,18 +826,6 @@ class EagerAssociationTest < ActiveRecord::TestCase
)
end
def test_preload_with_interpolation
assert_deprecated do
post = Post.includes(:comments_with_interpolated_conditions).find(posts(:welcome).id)
assert_equal [comments(:greetings)], post.comments_with_interpolated_conditions
end
assert_deprecated do
post = Post.joins(:comments_with_interpolated_conditions).find(posts(:welcome).id)
assert_equal [comments(:greetings)], post.comments_with_interpolated_conditions
end
end
def test_polymorphic_type_condition
post = Post.all.merge!(:includes => :taggings).find(posts(:thinking).id)
assert post.taggings.include?(taggings(:thinking_general))
@ -1294,23 +1282,22 @@ class EagerAssociationTest < ActiveRecord::TestCase
assert_equal pets(:parrot), Owner.including_last_pet.first.last_pet
end
test "include instance dependent associations is deprecated" do
test "preloading and eager loading of instance dependent associations is not supported" do
message = "association scope 'posts_with_signature' is"
assert_deprecated message do
begin
Author.includes(:posts_with_signature).to_a
rescue NoMethodError
# it's expected that preloading of this association fails
end
error = assert_raises(ArgumentError) do
Author.includes(:posts_with_signature).to_a
end
assert_match message, error.message
assert_deprecated message do
Author.preload(:posts_with_signature).to_a rescue NoMethodError
error = assert_raises(ArgumentError) do
Author.preload(:posts_with_signature).to_a
end
assert_match message, error.message
assert_deprecated message do
error = assert_raises(ArgumentError) do
Author.eager_load(:posts_with_signature).to_a
end
assert_match message, error.message
end
test "preloading readonly association" do

View File

@ -72,10 +72,6 @@ class Post < ActiveRecord::Base
through: :author_with_address,
source: :author_address_extra
has_many :comments_with_interpolated_conditions,
->(p) { where "#{"#{p.aliased_table_name}." rescue ""}body = ?", 'Thank you for the welcome' },
:class_name => 'Comment'
has_one :very_special_comment
has_one :very_special_comment_with_post, -> { includes(:post) }, :class_name => "VerySpecialComment"
has_one :very_special_comment_with_post_with_joins, -> { joins(:post).order('posts.id') }, class_name: "VerySpecialComment"