@@ -15,40 +15,42 @@ class Api::V1::UsersController < ApplicationController
1515 serializer: Api ::V1 ::UserSerializer ,
1616 include: []
1717 end
18+ end
1819```
1920
2021Bear in mind though that ActiveModelSerializers are [ framework-agnostic] ( outside_controller_use.md ) , Rails is just a common example here.
2122
2223### Links as an attribute of a resource
23- ** This is applicable to JSONAPI, JSON and Attributes adapters**
24+ ** This is applicable to JSON and Attributes adapters**
2425
2526You can define an attribute in the resource, named ` links ` .
2627
2728``` ruby
2829class Api ::V1 ::UserSerializer < ActiveModel ::Serializer
29- attributes :id , :name , :links
30+ include Rails .application.routes.url_helpers
31+
32+ attributes :id , :name
3033
31- def links
34+ attribute :links do
35+ id = object.id
3236 {
33- self: api_v1_user_path(object. id),
34- microposts: api_v1_microposts_path(user_id: object. id)
37+ self: api_v1_user_path(id),
38+ microposts: api_v1_microposts_path(user_id: id)
3539 }
3640 end
3741end
3842```
3943
40- This will result in (example is in JSONAPI adapter):
44+ Using the ` JSON ` adapter, this will result in:
45+
4146``` json
4247{
43- "data " : {
48+ "user " : {
4449 "id" : " 1" ,
45- "type" : " users" ,
46- "attributes" : {
47- "name" : " Example User" ,
48- "links" : {
49- "self" : " /api/v1/users/1" ,
50- "microposts" : " /api/v1/microposts?user_id=1"
51- }
50+ "name" : " John" ,
51+ "links" : {
52+ "self" : " /api/v1/users/1" ,
53+ "microposts" : " /api/v1/microposts?user_id=1"
5254 }
5355 }
5456}
@@ -58,7 +60,7 @@ This will result in (example is in JSONAPI adapter):
5860### Links as a property of the resource definiton
5961** This is only applicable to JSONAPI adapter**
6062
61- You can use the ` links ` class method to define the links you need in the resource's primary data.
63+ You can use the ` link ` class method to define the links you need in the resource's primary data.
6264
6365``` ruby
6466class Api ::V1 ::UserSerializer < ActiveModel ::Serializer
@@ -69,7 +71,8 @@ class Api::V1::UserSerializer < ActiveModel::Serializer
6971end
7072```
7173
72- This will result in (example is in JSONAPI adapter):
74+ Using the ` JSONAPI ` adapter, this will result in:
75+
7376``` json
7477{
7578 "data" : {
@@ -104,12 +107,12 @@ class Api::V1::UserSerializer < ActiveModel::Serializer
104107
105108 has_many :microposts , serializer: Api ::V1 ::MicropostSerializer do
106109 link(:related ) { api_v1_microposts_path(user_id: object.id) }
107- end
108110
109- # this is needed to avoid n+1, gem core devs are working to remove this necessity
110- # more on: https://github.com/rails-api/active_model_serializers/issues/1325
111- def microposts
112- object.microposts.loaded ? object.microposts : object.microposts.none
111+ microposts = object.microposts
112+ # The following code is needed to avoid n+1 queries.
113+ # Core devs are working to remove this necessity.
114+ # See: https://github.com/rails-api/active_model_serializers/issues/1325
115+ microposts.loaded? ? microposts : microposts.none
113116 end
114117end
115118```
0 commit comments