2016-11-27 1 views
1

JSON 객체를 렌더링하기 위해 활성 모델 시리얼 라이저가있는 레일 5 API를 빌드하고 있습니다. 버전에 대한 네임 스페이스를 사용하여 다음과 같이 컨트롤러를 구성했습니다. 내 리소스 중 하나를 표시하여 노래를 표시합니다.Namespaced (버전 관리) 컨트롤러가있는 활성 모델 시리얼 화기

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_atupdated_at과 같은 몇 가지 속성이 serializer에 포함되어 있지 않으므로 브라우저 응용 프로그램에 전송 된 JSON에 포함되지 않습니다.

내 문제는 내 응용 프로그램이 song_serializer을 완전히 무시한 것 같아서 노래의 모든 데이터베이스 필드가 포함 된 JSON을 보내는 것입니다. 모든 입력을 환영합니다.

답변

0

내가 생각하는 것보다 오랫동안 머리를 세게 치고 난 후, JSON을 렌더링하는 방식에서 내 노래가 내 노래에있는 것처럼 보였다. render json: { song: @song } 대신 render json: @song 을 사용했으며 이제는 내 시리얼 라이저를 사용합니다.

관련 문제