Skip to content

Commit f7a1585

Browse files
committed
Merge pull request #1034 from engineyard/id-attribute
allow id attribute to be overriden
2 parents 03ddeee + f6e3d4e commit f7a1585

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

lib/active_model/serializer.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,12 @@ def self.attribute(attr, options = {})
5050
key = options.fetch(:key, attr)
5151
@_attributes_keys[attr] = { key: key } if key != attr
5252
@_attributes << key unless @_attributes.include?(key)
53-
define_method key do
54-
object.read_attribute_for_serialization(attr)
55-
end unless method_defined?(key) || _fragmented.respond_to?(attr)
53+
54+
unless respond_to?(key, false) || _fragmented.respond_to?(attr)
55+
define_method key do
56+
object.read_attribute_for_serialization(attr)
57+
end
58+
end
5659
end
5760

5861
def self.fragmented(serializer)

test/serializers/attribute_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ def test_multiple_calls_with_the_same_attribute
3333

3434
assert_equal([:title], serializer_class._attributes)
3535
end
36+
37+
def test_id_attribute_override
38+
serializer = Class.new(ActiveModel::Serializer) do
39+
attribute :name, key: :id
40+
end
41+
42+
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer.new(@blog))
43+
assert_equal({ blog: { id: "AMS Hints" } }, adapter.serializable_hash)
44+
end
3645
end
3746
end
3847
end

0 commit comments

Comments
 (0)