Skip to content

Commit 715dbf3

Browse files
authored
Merge pull request #760 from nagirrab/performance_fix
Performance fix to skip data loading of belongs_to relations when not necessary
2 parents 7b73952 + 9544fdf commit 715dbf3

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

lib/jsonapi/resource_serializer.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,18 @@ def link_object(source, relationship, include_linkage = false)
298298

299299
# Extracts the foreign key value for a to_one relationship.
300300
def foreign_key_value(source, relationship)
301-
related_resource = source.public_send(relationship.name)
302-
return nil unless related_resource
303-
@id_formatter.format(related_resource.id)
301+
# If you have direct access to the underlying id, you don't have to load the relationship
302+
# which can save quite a lot of time when loading a lot of data.
303+
# This does not apply to e.g. has_one :through relationships.
304+
if source._model.respond_to?("#{relationship.name}_id")
305+
related_resource_id = source._model.public_send("#{relationship.name}_id")
306+
return nil unless related_resource_id
307+
@id_formatter.format(related_resource_id)
308+
else
309+
related_resource = source.public_send(relationship.name)
310+
return nil unless related_resource
311+
@id_formatter.format(related_resource.id)
312+
end
304313
end
305314

306315
def foreign_key_types_and_values(source, relationship)

0 commit comments

Comments
 (0)