Skip to content

Commit accafce

Browse files
authored
Merge pull request #1001 from dougo/use-foreign_key-in-foreign_key_value
Use foreign_key option when getting foreign key value.
2 parents 03f4937 + 510b421 commit accafce

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

lib/jsonapi/resource_serializer.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,11 +454,11 @@ def link_object(source, relationship, include_linkage = false)
454454
def foreign_key_value(source, relationship)
455455
related_resource_id = if source.preloaded_fragments.has_key?(format_key(relationship.name))
456456
source.preloaded_fragments[format_key(relationship.name)].values.first.try(:id)
457-
elsif source.respond_to?("#{relationship.name}_id")
457+
elsif source.respond_to?(relationship.foreign_key)
458458
# If you have direct access to the underlying id, you don't have to load the relationship
459459
# which can save quite a lot of time when loading a lot of data.
460460
# This does not apply to e.g. has_one :through relationships.
461-
source.public_send("#{relationship.name}_id")
461+
source.public_send(relationship.foreign_key)
462462
else
463463
source.public_send(relationship.name).try(:id)
464464
end

test/unit/serializer/serializer_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -985,6 +985,18 @@ def test_serializer_array_of_resources_always_include_to_one_linkage_data
985985
JSONAPI.configuration.always_include_to_one_linkage_data = false
986986
end
987987

988+
def test_serializer_always_include_to_one_linkage_data_does_not_load_association
989+
JSONAPI.configuration.always_include_to_one_linkage_data = true
990+
991+
post = Post.find(1)
992+
resource = Api::V1::PostResource.new(post, nil)
993+
JSONAPI::ResourceSerializer.new(Api::V1::PostResource).serialize_to_hash(resource)
994+
995+
refute_predicate post.association(:writer), :loaded?
996+
ensure
997+
JSONAPI.configuration.always_include_to_one_linkage_data = false
998+
end
999+
9881000
def test_serializer_array_of_resources
9891001

9901002
posts = []

0 commit comments

Comments
 (0)