Merge pull request #47872 from Shopify/dup-for-cpk-ar-models
Reset composite primary key in `#dup`
This commit is contained in:
commit
47d0eacdaa
@ -507,7 +507,11 @@ def init_with_attributes(attributes, new_record = false) # :nodoc:
|
||||
##
|
||||
def initialize_dup(other) # :nodoc:
|
||||
@attributes = @attributes.deep_dup
|
||||
@attributes.reset(@primary_key)
|
||||
if self.class.composite_primary_key?
|
||||
@primary_key.each { |key| @attributes.reset(key) }
|
||||
else
|
||||
@attributes.reset(@primary_key)
|
||||
end
|
||||
|
||||
_run_initialize_callbacks
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
require "models/bulb"
|
||||
require "models/pet"
|
||||
require "models/owner"
|
||||
require "models/cpk/book"
|
||||
require "concurrent/atomic/count_down_latch"
|
||||
require "active_support/core_ext/enumerable"
|
||||
require "active_support/core_ext/kernel/reporting"
|
||||
@ -101,7 +102,9 @@ def setup
|
||||
end
|
||||
|
||||
class BasicsTest < ActiveRecord::TestCase
|
||||
fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics, "warehouse-things", :authors, :author_addresses, :categorizations, :categories, :posts
|
||||
fixtures :topics, :companies, :developers, :projects, :computers, :accounts,
|
||||
:minimalistics, "warehouse-things", :authors, :author_addresses, :categorizations, :categories,
|
||||
:posts, :cpk_books
|
||||
|
||||
def test_generated_association_methods_module_name
|
||||
mod = Post.send(:generated_association_methods)
|
||||
@ -1002,6 +1005,15 @@ def test_dup
|
||||
assert_equal("c", duped_topic.title)
|
||||
end
|
||||
|
||||
def test_dup_for_a_composite_primary_key_model
|
||||
book = cpk_books(:cpk_great_author_first_book)
|
||||
new_book = book.dup
|
||||
|
||||
assert_equal "The first book", new_book.title
|
||||
assert_nil new_book.author_id
|
||||
assert_nil new_book.number
|
||||
end
|
||||
|
||||
DeveloperSalary = Struct.new(:amount)
|
||||
def test_dup_with_aggregate_of_same_name_as_attribute
|
||||
developer_with_aggregate = Class.new(ActiveRecord::Base) do
|
||||
|
Loading…
Reference in New Issue
Block a user