Я работаю над 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 :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
Это мой контроллер
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
Так это то, что я получил, когда я сделал запрос
{
"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"
}
]
}
Похоже, Активный модельный сериализатор не работал. Потому что, если я только вернул один объект, он работал нормально.
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 }
render :json => movie
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"
},
"category": [
{
"id": 4,
"name": "Biography"
},
{
"id": 16,
"name": "Mystery"
}
]
}
Как я могу исправить это и сделать сериализатор активной модели прекрасно работать с хэш-объектами с несколькими моделями?
Спасибо!
Как я могу объединить весь мой Сериализатор с одним '(MovieCastDirectorSerializer)'? – user3403614
Определив такой сериализатор в форме has_many: movies, has_many: casts, has_many: директора. –
Кстати, такие вещи, как 'through:' не имеют значения на уровне AMS. Говорят, что он собирается собирать сериализацию, независимо от того, где она назначается. –