Active Model SerializersとともにJSONAPI formatを使用して、rails-apiでアピを作成しています。アクティブモデルシリアライザのリレーションシップに使用するアトリビュートを選択するには
具体的なpost
を表示しているシリアライザがあり、これは多くの場合topics
であり、現在のところ、リレーションシップの下でこれらのトピックがリストされています。現在のところ、IDとタイプのみがリストされています。私はトピックのタイトルも表示したい。
私のコントローラにはinclude: 'topics'
を使用する人がいますが、そのトピックのタイトルだけを完全に記録する必要はありません。
質問:トピックから表示する属性を指定する方法を教えてください。
は私が
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics"
}
]
}
}
}
持っている私は何を
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics",
"title": "Topic Title"
}
]
}
}
}
私の現在のシリアライザクラス EDIT欲しい:これは私がしてください後だものです。その下の答えは、この作品を作るがあるが、そのない本当に私が後だ何 -
class PostSerializer < ActiveModel::Serializer
attributes :title
belongs_to :domain
belongs_to :user
has_many :topics, serializer: TopicSerializer
def topics
# THIS IS WHAT I AM REALLY ASKING FOR
end
end
class TopicSerializer < ActiveModel::Serializer
attributes :title, :description
belongs_to :parent
has_many :children
end
ことの一つは、私はを試みました。
class PostSerializer < ActiveModel::Serializer
attributes :title, :topics
belongs_to :domain
belongs_to :user
def topics
# THIS WAS ANSWERED BELOW! THANK YOU
end
end
ありがとうございました!それはうまくいった。 – alassiter
私はこの回答をupvoted b/cそれは私が提示した問題の一つに答えた。私はこの質問を混同するつもりはありませんでしたが、同じ問題に再び遭遇した後、私は私が不明であることに気付きました。私はこれについての礼儀がわからないので、私を許してください。質問は、関係についての属性を指定することを意図していました。「私が欲しいもの」と答え、ここでの答えは、私が試したことの一つに拡大しています。それはうまくいくが、私が本当に欲しいのは違う。 – alassiter
私はドキュメントの中でこの良い例を見ていないので、私はそれがサポートされていないと言っていますか、それが好きなように動作しません。アソシエーションをオーバーライドする関数は、アトリビュートではなくスコープを変更するように見えるように見えます。こちらをご覧くださいhttps://github.com/rails-api/active_model_serializers#user-content-overriding-association-methods。コントローラに関連するデータをインクルードしたりロードしたりしないと、シリアライザにN + 1が発生しませんか?あなたがpostgresを使用しているなら、あなたはdbからJSONを返すか、SQLのデータをマッサージしてカスタムシリアライザを持つことができます。 – penner