mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Make schema not crash on computed associations
We pick nil here as well.
This commit is contained in:
parent
6281a9149e
commit
538b0c0916
@ -180,11 +180,20 @@ module ActiveModel
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
associations = _associations.inject({}) do |hash, (attr,association_class)|
|
associations = {}
|
||||||
|
_associations.each do |attr, association_class|
|
||||||
association = association_class.new(attr, self)
|
association = association_class.new(attr, self)
|
||||||
|
|
||||||
model_association = klass.reflect_on_association(association.name)
|
if model_association = klass.reflect_on_association(association.name)
|
||||||
hash.merge association.key => { model_association.macro => model_association.name }
|
# Real association.
|
||||||
|
associations[association.key] = { model_association.macro => model_association.name }
|
||||||
|
else
|
||||||
|
# Computed association. We could infer has_many vs. has_one from
|
||||||
|
# the association class, but that would make it different from
|
||||||
|
# real associations, which read has_one vs. belongs_to from the
|
||||||
|
# model.
|
||||||
|
associations[association.key] = nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
{ :attributes => attrs, :associations => associations }
|
{ :attributes => attrs, :associations => associations }
|
||||||
|
|||||||
@ -678,11 +678,13 @@ class SerializerTest < ActiveModel::TestCase
|
|||||||
define_method(:model_class) do model end
|
define_method(:model_class) do model end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Computed attribute; not a column.
|
# Computed attributes (not real columns or associations).
|
||||||
def can_edit; end
|
def can_edit; end
|
||||||
|
def drafts; end
|
||||||
|
|
||||||
attributes :name, :age, :can_edit
|
attributes :name, :age, :can_edit
|
||||||
has_many :posts, :serializer => Class.new
|
has_many :posts, :serializer => Class.new
|
||||||
|
has_many :drafts, :serializer => Class.new
|
||||||
has_one :parent, :serializer => Class.new
|
has_one :parent, :serializer => Class.new
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -690,6 +692,7 @@ class SerializerTest < ActiveModel::TestCase
|
|||||||
:attributes => { :name => :string, :age => :integer, :can_edit => nil },
|
:attributes => { :name => :string, :age => :integer, :can_edit => nil },
|
||||||
:associations => {
|
:associations => {
|
||||||
:posts => { :has_many => :posts },
|
:posts => { :has_many => :posts },
|
||||||
|
:drafts => nil,
|
||||||
:parent => { :belongs_to => :parent }
|
:parent => { :belongs_to => :parent }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user