如何在ActiveModel :: Serializer

时间:2018-07-11 10:48:09

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

我有以下序列化程序

class BookSerializer < ActiveModel::Serializer
  attributes :id, :name, :publisher, :author, :cover_url
  has_many :chapters
end

我在 bookscontroller.rb 文件中有两种方法,如下所示:

def index
  books = Book.select(:id, :name, :publisher, :publisher, :cover, :author)
  if books.present?
    render json: books
  end
end

def show
  book = Book.find_by_id params[:id]
  render json: book
end

实际上,一切正常,但问题是我希望显示页面中的章节记录不在索引页面上,但是现在这两种操作都在运行获取章节的查询,但我只想包含 has_many:chapters

那么我可以在Rails控制器中使用任何方法来关联特定方法吗?

1 个答案:

答案 0 :(得分:1)

您可以对不同的操作使用不同的序列化器。例如,从BookSerializer中删除has_many :chapters并创建一个单独的BookWithChaptersSerializer。如下使用它:

class BookWithChaptersSerializer < ActiveModel::Serializer
  attributes :id, :name, :publisher, :author, :cover_url
  has_many :chapters
end

def show
  book = Book.find_by_id params[:id]
  render json: book, serializer: BookWithChaptersSerializer
end