具有命名空间(版本化)控制器的活动模型序列化程序

时间:2016-11-27 17:40:27

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

我正在构建一个带有活动模型序列化程序的rails 5 api来呈现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。歌曲模型还有一些其他属性,例如artistcreated_atupdated_at,这些属性未包含在序列化程序中,因此我理解它不会包含在发送到的JSON中浏览器应用。

我的问题是我的应用程序似乎完全忽略了song_serializer并且正在发送包含歌曲的所有数据库字段的JSON。任何意见都会受到欢迎。

1 个答案:

答案 0 :(得分:0)

敲了敲我的脑袋的时间比我承认的要长,我的问题似乎出现在我的songs_controller中,就像我渲染JSON一样。代替 render json: { song: @song } 我用了 render json: @song 它现在使用我的序列化器。