Skip to content

Commit ae6805e

Browse files
committed
Add serializer to association block context
1 parent d5833e8 commit ae6805e

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

lib/active_model/serializer/reflection.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ def include_data(value = true)
5959
def value(serializer)
6060
@object = serializer.object
6161
@scope = serializer.scope
62+
# Add '@serializer' to binding for use in association block as 'serializer'
63+
@serializer = serializer
6264

6365
if block
6466
block_value = instance_eval(&block)
@@ -117,7 +119,7 @@ def build_association(subject, parent_serializer_options)
117119

118120
protected
119121

120-
attr_accessor :object, :scope
122+
attr_accessor :object, :scope, :serializer
121123

122124
private
123125

test/adapter/json_api/relationships_test.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class RelationshipAuthorSerializer < ActiveModel::Serializer
4040

4141
has_many :roles do
4242
meta count: object.posts.count
43+
serializer.cached_roles
4344
end
4445

4546
has_one :blog do
@@ -60,14 +61,20 @@ class RelationshipAuthorSerializer < ActiveModel::Serializer
6061
end
6162
meta liked: object.likes.any?
6263
end
64+
65+
def cached_roles
66+
[
67+
Role.new(id: 'from-serializer-method')
68+
]
69+
end
6370
end
6471

6572
def setup
6673
@post = Post.new(id: 1337, comments: [], author: nil)
6774
@blog = Blog.new(id: 1337, name: 'extra')
6875
@bio = Bio.new(id: 1337)
6976
@like = Like.new(id: 1337)
70-
@role = Role.new(id: 1337)
77+
@role = Role.new(id: 'from-record')
7178
@profile = Profile.new(id: 1337)
7279
@location = Location.new(id: 1337)
7380
@reviewer = Author.new(id: 1337)
@@ -144,7 +151,7 @@ def test_relationship_block_link_meta
144151

145152
def test_relationship_meta
146153
expected = {
147-
data: [{ id: '1337', type: 'roles' }],
154+
data: [{ id: 'from-serializer-method', type: 'roles' }],
148155
meta: { count: 1 }
149156
}
150157
assert_relationship(:roles, expected)

0 commit comments

Comments
 (0)