Skip to content
Browse files

Merge pull request #8352 from steveklabnik/update_7858

Specify type of singular assication during serialization
  • Loading branch information...
2 parents 5f15956 + 9504b44 commit 4c99d0870c87e136b257e03fffdfc5f86c60ff34 @rafaelfranca rafaelfranca committed Nov 28, 2012
View
2 activemodel/CHANGELOG.md
@@ -1,5 +1,7 @@
## Rails 4.0.0 (unreleased) ##
+* Specify type of singular association during serialization *Steve Klabnik*
+
* Fixed length validator to correctly handle nil values. Fixes #7180.
*Michal Zima*
View
7 activemodel/lib/active_model/serializers/xml.rb
@@ -149,7 +149,12 @@ def add_associations(association, records, opts)
end
else
merged_options[:root] = association.to_s
- records.to_xml(merged_options)
+
+ unless records.class.to_s.underscore == association.to_s
+ merged_options[:type] = records.class.name
+ end
+
+ records.to_xml merged_options
end
end
View
12 activemodel/test/cases/serializers/xml_serialization_test.rb
@@ -6,12 +6,12 @@
class Contact
include ActiveModel::Serializers::Xml
- attr_accessor :address, :friends
+ attr_accessor :address, :friends, :contact
remove_method :attributes if method_defined?(:attributes)
def attributes
- instance_values.except("address", "friends")
+ instance_values.except("address", "friends", "contact")
end
end
@@ -56,6 +56,9 @@ def setup
@contact.address.zip = 11111
@contact.address.apt_number = 35
@contact.friends = [Contact.new, Contact.new]
+ @related_contact = SerializableContact.new
+ @related_contact.name = "related"
+ @contact.contact = @related_contact
end
test "should serialize default root" do
@@ -256,4 +259,9 @@ def to_ary
assert_match %r{<address>}, xml
assert_match %r{<apt-number type="integer">}, xml
end
+
+ test "association with sti" do
+ xml = @contact.to_xml(include: :contact)
+ assert xml.include?(%(<contact type="SerializableContact">))
+ end
end

0 comments on commit 4c99d08

Please sign in to comment.
Something went wrong with that request. Please try again.