1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Deprecate leaking scope in callback block for association relation

Follow up of #35280, I missed that `AssociationRelation` is using
`scoping` and not use `super`.
This commit is contained in:
Ryuta Kamizono 2019-10-04 14:49:41 +09:00
parent eae80d7c27
commit e0a9af9543
3 changed files with 26 additions and 3 deletions

View file

@ -16,15 +16,18 @@ module ActiveRecord
end
def build(*args, &block)
block = _deprecated_scope_block("new", &block)
scoping { @association.build(*args, &block) }
end
alias new build
def create(*args, &block)
block = _deprecated_scope_block("create", &block)
scoping { @association.create(*args, &block) }
end
def create!(*args, &block)
block = _deprecated_scope_block("create!", &block)
scoping { @association.create!(*args, &block) }
end

View file

@ -2499,14 +2499,34 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
test "first_or_initialize adds the record to the association" do
firm = Firm.create! name: "omg"
client = firm.clients_of_firm.first_or_initialize
client = firm.clients_of_firm.where(name: "lol").first_or_initialize do |cli|
assert_deprecated do
assert_equal 0, Client.count
end
end
assert_equal [client], firm.clients_of_firm
end
test "first_or_create adds the record to the association" do
firm = Firm.create! name: "omg"
firm.clients_of_firm.load_target
client = firm.clients_of_firm.first_or_create name: "lol"
client = firm.clients_of_firm.where(name: "lol").first_or_create do |cli|
assert_deprecated do
assert_equal 0, Client.count
end
end
assert_equal [client], firm.clients_of_firm
assert_equal [client], firm.reload.clients_of_firm
end
test "first_or_create! adds the record to the association" do
firm = Firm.create! name: "omg"
firm.clients_of_firm.load_target
client = firm.clients_of_firm.where(name: "lol").first_or_create! do |cli|
assert_deprecated do
assert_equal 0, Client.count
end
end
assert_equal [client], firm.clients_of_firm
assert_equal [client], firm.reload.clients_of_firm
end

View file

@ -9,7 +9,7 @@ class Bulb < ActiveRecord::Base
after_initialize :record_scope_after_initialize
def record_scope_after_initialize
@scope_after_initialize = self.class.all
@scope_after_initialize = self.class.unscoped.all
end
after_initialize :record_attributes_after_initialize