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:
parent
eae80d7c27
commit
e0a9af9543
3 changed files with 26 additions and 3 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue