Skip to content

Commit 1939ace

Browse files
committed
Merge pull request #4231 from estolfo/MONGOID-3606-foreign-key-poly
MONGOID-3606 Don't evolve foreign keys of polymorphic relations
2 parents 071b49a + 894dc1b commit 1939ace

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/mongoid/fields/foreign_key.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@ def foreign_key?
6363
# @since 3.0.0
6464
def evolve(object)
6565
if object_id_field? || object.is_a?(Document)
66-
object.__evolve_object_id__
66+
if metadata.polymorphic? && constraint
67+
constraint.convert(object)
68+
else
69+
object.__evolve_object_id__
70+
end
6771
else
6872
related_id_field.evolve(object)
6973
end

spec/mongoid/fields/foreign_key_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,29 @@
444444
end
445445
end
446446
end
447+
448+
context "when the metadata is polymoprhic" do
449+
450+
let(:metadata) do
451+
Agent.reflect_on_association(:names)
452+
end
453+
454+
let(:field) do
455+
described_class.new(:nameable_id, type: Object, metadata: metadata)
456+
end
457+
458+
let(:value) do
459+
BSON::ObjectId.new().to_s
460+
end
461+
462+
let(:evolved) do
463+
field.evolve(value)
464+
end
465+
466+
it "does not change the foreign key" do
467+
expect(evolved).to be(value)
468+
end
469+
end
447470
end
448471

449472
describe "#lazy?" do

0 commit comments

Comments
 (0)