如何通过Rails的Active模型序列化器呈现嵌套对象的父数据?
我正在研究Rails 5 api only app。
所以这是我的模型序列化器
class MovieSerializer < ActiveModel::Serializer attributes :id ,:name,:release_year,:story,:in_theater,:poster,:score,:user_count belongs_to :age_rating belongs_to :company has_many :categories has_many :movie_celebrities end class MovieCelebritySerializer < ActiveModel::Serializer attributes :id,:vacancy,:title belongs_to :celebrity end class CelebritySerializer < ActiveModel::Serializer attributes :id, :first_name, :last_name has_many :movie_celebrities end
我的控制器
class Api::V1::MoviesController < ApplicationController # GET /v1/movies/:id def show movie = Movie.find_by(id: params[:id]) render json: movie end end
所以这就是我得到的
{ "id": 1, "name": "0 The Doors of Perception", "release_year": 2007, "story": "Non doloribus qui et eum impedit. Rerum mollitia debitis sit nesciunt. Vero autem quae sit aliquid rerum ex fugit. Eligendi assumenda et eos. Blanditiis hic ut. Commodi quo sunt voluptatem quasi.", "in_theater": false, "poster": "'http://sofzh.miximages.com/ruby-on-rails/15399e7a7b11a8c2ef28511107c90c6f.jpg',", "score": 0, "user_count": 6950, "age_rating": { "id": 2, "name": "PG" }, "company": { "id": 5, "name": "Gislason, Jacobs and Graham" }, "categories": [ { "id": 4, "name": "Biography" }, { "id": 16, "name": "Mystery" } ], "movie_celebrities": [ { "id": 1, "vacancy": "director", "title": "" }, { "id": 2, "vacancy": "cast", "title": "Pro x" }, { "id": 3, "vacancy": "cast", "title": "Magneto" } ] }
问题是我需要像这样在每个movie_celebrities
对象中的名人数据。
[ { "id": 1, "vacancy": "director", "title": "", "celebrity": { "id": 17, "first_name": "Jannie", "last_name": "Stiedemann" } }, { "id": 2, "vacancy": "cast", "title": "Pro x", "celebrity": { "id": 56, "first_name": "Diego", "last_name": "Hickle" } }, { "id": 3, "vacancy": "cast", "title": "Magneto", "celebrity": { "id": 23, "first_name": "Myrtie", "last_name": "Lebsack" } } ]
那么我怎样才能使这种情况有效呢? 谢谢!
您应该将ActiveModelSerializers.config.default_includes = '**'
添加到config/initializers/active_model_serializers.rb
。 请参阅此处的文档 或者设置为正确渲染,以防您更喜欢粒度控制。
- 具有嵌入式ID和侧载的Ember-Data和Active Model Serializer的has_many配置
- 控制器中的索引方法不适用于活动模型序列化程序
- <NoMethodError:#Record :: ActiveRecord_Relation的未定义方法`read_attribute_for_serialization':
- Rails Active Model Serializer – has_many并访问父记录
- Active Model Serializers:nil的未定义方法`url_for’:NilClass
- Rails ActiveModelSerializer将两个相同类型模型的列表组合成一个序列化响应,具有不同的名称
- 活动模型序列化程序belongs_to
- 使用active_model_serializers序列化深层嵌套关联
- Url Helper在ActiveModelSerializer 0.10.0中?