2016-10-12 11 views
0

私はRails 5 APIのみのアプリケーションに取り組んでいます。Rails用のアクティブモデルシリアライザを介してネストされたオブジェクトの親データをレンダリングするには?

は、これが私のモデルシリアライザある

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://cdn.mos.cms.futurecdn.net/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" 
    } 
    } 
] 

どのようにしてこの状況を有効にすることができますか? ありがとう!

+0

'render json:@movie、includes:{movie_celebrities:[:celebrity]}'を試してください。シリアライザafaikでネストされた関連付けを指定することはできませんが、機能リクエストがあります。 – max

+0

第1に、どのバージョンの "シリアライザ"を使用しますか?また、 'MovieCelebritySerializer'から 'has_one:celebrity or has_many:celebrities'の名前を変更し、' CelebritySerializer 'から' has_many:movie_celebrities'を削除してみてください。今 – 7urkm3n

答えて

2

ActiveModelSerializers.config.default_includes = '**'config/initializers/active_model_serializers.rbを追加する必要があります。ドキュメントhereを参照してください。より細かいコントロールが必要な場合は、レンダリングのためにsetincludedを使用してください。

関連する問題