Active Model Serializer с контроллерами пространства имен (версионными)

Я создаю API для рельсов 5 с активными сериализаторами моделей для визуализации объектов JSON. Я структурировал свои контроллеры следующим образом, используя пространство имен для версий. Я покажу один из моих ресурсов для отображения песни.

application_controller.rb (упрощенный):

class ApplicationController < ActionController::API
  include ActionController::Serialization
end

songs_controller.rb:

class Api::V1::SongsController < ApplicationController
  before_action :set_song, only: [:show, :update, :destroy]
  def show
    authorize @song
    render json: { song: @song }
  end
  private
  def song_params
    params.require(:song).permit(:title, :artist, :band_id)
  end
  def set_song
    @song = Song.find(params[:id])
  end
end

songs_serializer.rb

class SongSerializer < ActiveModel::Serializer
  attributes :id, :title, :band_id
end

Модель песни не имеет пространства имен в Api::V1. Модель песни имеет несколько других атрибутов, таких как artist, created_at и updated_at, которые не включены в сериализатор, поэтому, как я понимаю, они не будут включены в JSON, отправляемый в приложение браузера.

Моя проблема в том, что мое приложение, похоже, полностью игнорирует song_serializer и отправляет JSON, который включает все поля базы данных для песни. Любой вклад будет приветствоваться.


person klaugh    schedule 27.11.2016    source источник


Ответы (1)


После того, как я ударил себя по голове дольше, чем мне хотелось бы признать, моя проблема, похоже, была в моем song_controller в том, как я отображал JSON. Вместо render json: { song: @song } я использовал render json: @song , и теперь он использует мой сериализатор.

person klaugh    schedule 27.11.2016