Active Model Serializer настроить ответ JSON - PullRequest
0 голосов
/ 05 июня 2018

Так что у меня проблема с амс.Я использую Rails 5.2 и читаю множество учебных пособий, и даже когда я сделал именно то, что они показали, у меня все еще есть то, чего нет, и я не нашел ответа в Google.

У меня есть модель курса, Видео, викторины и сегменты.Конечно, есть много сегментов, сегмент может быть видео или викторина (я использую Сти).Вот как я это написал:

app / models / course.rb

class Course < ApplicationRecord
  validates :title ,presence: true
  validates :author ,presence: true

  has_many :videos
  has_many :quizs
  has_many :segments


end

app / models / сегмент.rb

class Segment < ApplicationRecord
  belongs_to :course

end

app / models / quiz.rb

class Quiz < Segment
  validates :course_id ,presence: true
  validates :name ,presence: true

  belongs_to :course
end

app / models / video.rb

class Video < Segment
  validates :course_id ,presence: true
  validates :name ,presence: true

  belongs_to :course
end

app / controllers / courses_controller.rb

class CoursesController < InheritedResources::Base
  def show
    @course = Course.find(params[:id])
    render json: @course.attributes
  end

  def index
    @courses = Course.all
    render json: @courses
  end

end

app / serializers / course_serializer.rb

class CourseSerializer < ActiveModel::Serializer
  attributes :title, :author
  has_many :segments

end

и вот что мне показалось

У меня есть пара проблем:

  1. Iя не знаю, откуда взято это имя, и я не знаю, как его изменить или скрыть.
  2. , даже когда я запрашиваю просмотр одного курса, я получаю дату создания и другие вещи, которые я не сделалхочу, хотя я настроил его так, что вижу только заголовок и автора.
  3. Я хочу знать, смогу ли я настроить ответ json, чтобы не видеть заголовок отношений или изменять его имя.

1 Ответ

0 голосов
/ 05 июня 2018
  1. Вы не создали SegmentSerializer.По умолчанию AMS сериализует все поля.

class SegmentSerializer < ActiveModel::Serializer attributes :name end

Удалить вызов метода attributes.Он возвращает Hash, и ваш сериализатор не используется.

`` `

 class CoursesController < InheritedResources::Base
  def show
    @course = Course.find(params[:id])
    render json: @course
  end

  def index
    @courses = Course.all
    render json: @courses
  end

end

` ``

Используйте опцию key

has_many :segments, key: :your_key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...