Active Model Serializer自定义json响应

时间:2018-06-05 15:41:28

标签: ruby-on-rails json api activemodel active-model-serializers

所以我遇到了问题。我正在使用Rails 5.2并且我阅读了很多教程,甚至当我完全按照他们所展示的那样做时我仍然有一些他们没有的东西,而我在谷歌上找不到答案。

我有模特课程,视频,测验和细分。 课程有很多段,段可以是视频或测验(我使用sti)。 这就是我写它的方式:

的应用程序/模型/ course.rb

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

  has_many :videos
  has_many :quizs
  has_many :segments


end

的应用程序/模型/ segment.rb

class Segment < ApplicationRecord
  belongs_to :course

end

的应用程序/模型/ quiz.rb

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

  belongs_to :course
end

的应用程序/模型/ video.rb

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

  belongs_to :course
end

的应用程序/控制器/ 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

的应用程序/串行器/ course_serializer.rb

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

end

and this is what is showed me

我有几个问题:

  1. 我不知道这个数据名称的来源,我不知道如何更改或隐藏它。
  2. 即使我要求查看一门课程,我也会得到创建的日期和其他我不想要的东西,虽然我配置了它所以我只看到了标题和作者。
  3. 我想知道我是否可以自定义json响应,因此我不会看到关系的标题或更改它的名称。

1 个答案:

答案 0 :(得分:0)

  1. 您还没有创建SegmentSerializer。默认情况下,AMS将序列化所有字段。
  2. class SegmentSerializer < ActiveModel::Serializer attributes :name end

    1. 删除attributes方法调用。它返回Hash,然后不使用序列化程序。
    2. ```

       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
      

      ```

      1. 使用key选项

        has_many :segments, key: :your_key