Skip to content

Commit c7c0974

Browse files
committed
Fix attribute type cast for duplicated record.
1 parent 4589e4b commit c7c0974

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

lib/enumerize/activerecord.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,11 @@ def serialize(value)
122122
end
123123

124124
def cast(value)
125-
@attr.find_value(@subtype.cast(value))
125+
if value.is_a?(::Enumerize::Value)
126+
value
127+
else
128+
@attr.find_value(@subtype.cast(value))
129+
end
126130
end
127131

128132
def as_json(options = nil)

test/activerecord_test.rb

+12
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,18 @@ def self.name
668668
expect(User.find_by(newsletter_subscribed: false).newsletter_subscribed).must_equal 'unsubscribed'
669669
end
670670

671+
it 'has same value with original object when created by #dup' do
672+
user1 = User.new(skill: :casual)
673+
user2 = user1.dup
674+
expect(user2.skill).must_equal 'casual'
675+
end
676+
677+
it 'has same value with original object when created by #clone' do
678+
user1 = User.new(skill: :casual)
679+
user2 = user1.clone
680+
expect(user2.skill).must_equal 'casual'
681+
end
682+
671683
if Rails::VERSION::MAJOR >= 6
672684
it 'supports AR#insert_all' do
673685
User.delete_all

0 commit comments

Comments
 (0)