Ich arbeite an Rails 5 api nur App.Aktives Modell Serializer funktioniert nicht, wenn ich versuche, einen Hash mehrerer Modelle über Rails zurückzugeben?
Das ist also mein Modell Serializer
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 :category , through: :movie_category
end
class CelebritySerializer < ActiveModel::Serializer
attributes :id, :first_name, :last_name
has_many :movie_celebrity
end
class MovieCelebritySerializer < ActiveModel::Serializer
attributes :id,:vacancy,:title
belongs_to :movie
belongs_to :celebrity
end
Dies ist mein Controller
class Api::V1::MoviesController < ApplicationController
# GET /v1/movies/:id
def show
movie = Movie.find_by(id: params[:id])
casts = MovieCelebrity.where(movie_id: params[:id],vacancy: "cast")
directors = MovieCelebrity.where(movie_id: params[:id],vacancy: "director")
render :json => {:movie => movie, :casts => casts , :directors => directors}
end
end
Also das ist, was ich habe, wenn ich eine Anfrage gemacht
{
"movie": {
"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,
"age_rating_id": 2,
"company_id": 5,
"created_at": "2016-10-12T12:45:26.213Z",
"updated_at": "2016-10-12T12:45:26.213Z",
"release_date": "2016-01-18",
"poster": "'http://cdn.mos.cms.futurecdn.net/15399e7a7b11a8c2ef28511107c90c6f.jpg',",
"score": 0,
"user_count": 6950
},
"casts": [
{
"id": 2,
"vacancy": "cast",
"title": "Pro x",
"movie_id": 1,
"celebrity_id": 56,
"created_at": "2016-10-12T12:45:28.001Z",
"updated_at": "2016-10-12T12:45:28.001Z"
},
{
"id": 3,
"vacancy": "cast",
"title": "Magneto",
"movie_id": 1,
"celebrity_id": 23,
"created_at": "2016-10-12T12:45:28.006Z",
"updated_at": "2016-10-12T12:45:28.006Z"
}
],
"directors": [
{
"id": 1,
"vacancy": "director",
"title": "",
"movie_id": 1,
"celebrity_id": 17,
"created_at": "2016-10-12T12:45:27.993Z",
"updated_at": "2016-10-12T12:45:27.993Z"
}
]
}
Es wie Active scheint Modell-Serializer funktionierte nicht. Weil, wenn ich nur ein Objekt zurückgebe, funktionierte es gut so.
Wie kann ich dies behoben und die Active Model Serializer funktioniert gut mit mehreren Modellen Hash-Objekt?
Danke!
Wie kann ich all meinen Serializer mit dem '(MovieCastDirectorSerializer)' kombinieren? – user3403614
Durch die Definition eines solchen Serialisierers in der Form has_many: filme, has_many: casts, has_many: directors. –
Btw, Dinge wie 'through:' haben auf AMS-Ebene keine Bedeutung. Es wird nur gesagt, dass die Sammlung in die Serialisierung übernommen werden soll, egal von wo sie zugewiesen wird. –