mirror of https://github.com/rails/rails
Merge pull request #11306 from jetthoughts/11288_remove_extra_queries_for_belongs_to_with_touch
#11288: Removed duplicated touching Conflicts: activerecord/CHANGELOG.md
This commit is contained in:
commit
7948d78905
|
@ -1,3 +1,10 @@
|
|||
* Remove extra select and update queries on save/touch/destroy ActiveRecord model
|
||||
with belongs to reflection with option `touch: true`.
|
||||
|
||||
Fixes: #11288
|
||||
|
||||
*Paul Nikitochkin*
|
||||
|
||||
* Remove deprecated nil-passing to the following `SchemaCache` methods:
|
||||
`primary_keys`, `tables`, `columns` and `columns_hash`.
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ module ActiveRecord::Associations::Builder
|
|||
end
|
||||
|
||||
def self.touch_record(o, foreign_key, name, touch) # :nodoc:
|
||||
old_foreign_id = o.attribute_was(foreign_key)
|
||||
old_foreign_id = o.changed_attributes[foreign_key]
|
||||
|
||||
if old_foreign_id
|
||||
klass = o.association(name).klass
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require "cases/helper"
|
||||
require 'cases/helper'
|
||||
require 'models/developer'
|
||||
require 'models/project'
|
||||
require 'models/company'
|
||||
|
@ -14,6 +14,8 @@ require 'models/sponsor'
|
|||
require 'models/member'
|
||||
require 'models/essay'
|
||||
require 'models/toy'
|
||||
require 'models/invoice'
|
||||
require 'models/line_item'
|
||||
|
||||
class BelongsToAssociationsTest < ActiveRecord::TestCase
|
||||
fixtures :accounts, :companies, :developers, :projects, :topics,
|
||||
|
@ -324,6 +326,45 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|||
assert_equal 1, Topic.find(topic.id)[:replies_count]
|
||||
end
|
||||
|
||||
def test_belongs_to_with_touch_option_on_touch
|
||||
line_item = LineItem.create!
|
||||
Invoice.create!(line_items: [line_item])
|
||||
|
||||
assert_queries(1) { line_item.touch }
|
||||
end
|
||||
|
||||
def test_belongs_to_with_touch_option_on_touch_and_removed_parent
|
||||
line_item = LineItem.create!
|
||||
Invoice.create!(line_items: [line_item])
|
||||
|
||||
line_item.invoice = nil
|
||||
|
||||
assert_queries(2) { line_item.touch }
|
||||
end
|
||||
|
||||
def test_belongs_to_with_touch_option_on_update
|
||||
line_item = LineItem.create!
|
||||
Invoice.create!(line_items: [line_item])
|
||||
|
||||
assert_queries(2) { line_item.update amount: 10 }
|
||||
end
|
||||
|
||||
def test_belongs_to_with_touch_option_on_destroy
|
||||
line_item = LineItem.create!
|
||||
Invoice.create!(line_items: [line_item])
|
||||
|
||||
assert_queries(2) { line_item.destroy }
|
||||
end
|
||||
|
||||
def test_belongs_to_with_touch_option_on_touch_and_reassigned_parent
|
||||
line_item = LineItem.create!
|
||||
Invoice.create!(line_items: [line_item])
|
||||
|
||||
line_item.invoice = Invoice.create!
|
||||
|
||||
assert_queries(3) { line_item.touch }
|
||||
end
|
||||
|
||||
def test_belongs_to_counter_after_update
|
||||
topic = Topic.create!(title: "37s")
|
||||
topic.replies.create!(title: "re: 37s", content: "rails")
|
||||
|
|
Loading…
Reference in New Issue