Serialize polymorphic id like a composite FK

This commit is contained in:
Adman65 2011-12-12 14:41:34 +01:00
parent 638614ffde
commit 1e32090477
2 changed files with 34 additions and 1 deletions

View File

@ -112,7 +112,16 @@ module ActiveModel
end
def serialize_ids(object, scope)
object && object.read_attribute_for_serialization(:id)
return unless object
if polymorphic?
{
:id => object.read_attribute_for_serialization(:id),
"#{name}_type".to_sym => object.class.to_s.split('::').last
}
else
object.read_attribute_for_serialization(:id)
end
end
end
end

View File

@ -710,4 +710,28 @@ class SerializerTest < ActiveModel::TestCase
}
}, serializer.as_json)
end
def test_polymorphic_has_one_with_ids
polymorphic_blog = Class.new do
attr_accessor :writer
end
polymorphic_serializer = Class.new(ActiveModel::Serializer) do
embed :ids
has_one :writer, :polymorphic => true
end
user = PolymorphicUser.new :id => 1
blog = polymorphic_blog.new
blog.writer = user
serializer = polymorphic_serializer.new(blog, user)
assert_equal({
:writer => {
:writer_type => 'PolymorphicUser',
:id => 1
}
}, serializer.as_json)
end
end