mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #37360 from kamipo/deprecate_leaking_scope
Deprecate leaking scope in callback block for association relation
This commit is contained in:
commit
9b234bbdfd
3 changed files with 26 additions and 3 deletions
|
@ -16,15 +16,18 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def build(*args, &block)
|
def build(*args, &block)
|
||||||
|
block = _deprecated_scope_block("new", &block)
|
||||||
scoping { @association.build(*args, &block) }
|
scoping { @association.build(*args, &block) }
|
||||||
end
|
end
|
||||||
alias new build
|
alias new build
|
||||||
|
|
||||||
def create(*args, &block)
|
def create(*args, &block)
|
||||||
|
block = _deprecated_scope_block("create", &block)
|
||||||
scoping { @association.create(*args, &block) }
|
scoping { @association.create(*args, &block) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def create!(*args, &block)
|
def create!(*args, &block)
|
||||||
|
block = _deprecated_scope_block("create!", &block)
|
||||||
scoping { @association.create!(*args, &block) }
|
scoping { @association.create!(*args, &block) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2499,14 +2499,34 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||||
|
|
||||||
test "first_or_initialize adds the record to the association" do
|
test "first_or_initialize adds the record to the association" do
|
||||||
firm = Firm.create! name: "omg"
|
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
|
assert_equal [client], firm.clients_of_firm
|
||||||
end
|
end
|
||||||
|
|
||||||
test "first_or_create adds the record to the association" do
|
test "first_or_create adds the record to the association" do
|
||||||
firm = Firm.create! name: "omg"
|
firm = Firm.create! name: "omg"
|
||||||
firm.clients_of_firm.load_target
|
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.clients_of_firm
|
||||||
assert_equal [client], firm.reload.clients_of_firm
|
assert_equal [client], firm.reload.clients_of_firm
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ class Bulb < ActiveRecord::Base
|
||||||
|
|
||||||
after_initialize :record_scope_after_initialize
|
after_initialize :record_scope_after_initialize
|
||||||
def record_scope_after_initialize
|
def record_scope_after_initialize
|
||||||
@scope_after_initialize = self.class.all
|
@scope_after_initialize = self.class.unscoped.all
|
||||||
end
|
end
|
||||||
|
|
||||||
after_initialize :record_attributes_after_initialize
|
after_initialize :record_attributes_after_initialize
|
||||||
|
|
Loading…
Reference in a new issue