2014-11-05 2 views
9

json api 프로젝트에서 rails-api gem을 사용하고 있습니다. 그런 목적으로 활성 모델 serializer gem을 사용하여 객체를 직렬화했지만 일부 객체는 직렬화되지 않았습니다. 액티브 모델 시리얼 라이저를 사용합니다.활성 모델 serializer가 rails-api gem과 함께 작동하지 않습니다

나는 나의 시리얼 폴더

class MessageSerializer < ActiveModel::Serializer 
    attributes :id, :sender_id, :recipient_id, :sender_type, :subj, :body, :status, :sender 

    def sender 
    object.user.try('username') 
    end 
end 

의 내부 MessageSerializer을 그리고

class Api::MessagesController < Api::BaseController 

    def index 
    @messages = current_user.incoming_messages 
    render json: @messages, serializer: MessageSerializer 
    end 

end 

를 다음과 같이 내 메시지 컨트롤러는 그러나 문제가 클라이언트에 던져 직렬화 된 객체는 모든 분야가 포함되어있다 메시지 모델 ie; 그것은 created_at, updated_at 필드도 포함합니다.

시리얼 라이저를 사용하지 않는 것 같습니다.

무엇이 잘못되었을 수 있습니까? 그것에 대해 많이 조사했지만 도움이되는 게시물을 찾지 못했습니다.

감사합니다.

+0

변경이이 또한 JSON 렌더링 변경 : @ 메시지를 시도 한 번 – Gowri

+0

좋지 않아. Api :: BaseController 클래스는 ApplicaionController 클래스를 상속합니다. 그래서 기본적으로 동일합니다. – Gagan

답변

15

을, 당신은이 울부 짖는 소리 등 추가 했습니까? 직렬화가 레일-API에 기본적으로로드되지 않기 때문이다

include ActionController::Serialization

+1

올바른 해결책입니다. 절대로 보석을 다운 그레이드하지 마십시오. – seoyoochan

10

사용중인 AMS 버전은 무엇입니까?

나는이 문제를 겪었고 AMS 버전을 0.9.X에서 0.8.X로 변경하여 문제를 해결할 수있었습니다. 이 작업은 Gemfile에 버전 번호를 추가하여 수행 할 수 있습니다.

gem 'active_model_serializers', '~> 0.8.0' 

AMS GitHub 레포에는 이에 대한 메모가 있습니다. 내가 다운 그레이드하지 않았다

https://github.com/rails-api/active_model_serializers#maintenance-please-read

+0

고마워요! 이것을 깨닫기 전에 몇 시간을 낭비 했겠습니까! –

1

, 나는 다른 일을 시도 약간의 시간을 할애하고 마지막에 나는이 같은 패턴에 도착 :

def sender 
    if object.sender 
    serializer = SenderSerializer.new(object.sender) 
    ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:senders] 
    end 
end 

그것은 추한하지만 나를 위해 속임수를 썼는지 . has_many 관계에 대한

, 당신은 같은 것을 할 수 있습니다 : 당신의 BaseController에서

def attachments 
    attachments = object.attachments.to_a 
    return [] if attachments.empty? 
    serializer = ActiveModel::Serializer::ArraySerializer.new(attachments, each_serializer:AttachmentSerializer) 
    ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:attachments] 
end 
5

.
당신이해야 할 : 클래스 API 광고 :: 클래스 API 광고 :: MessagesController

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

그게 나를 위해 아무 것도 바뀌지 않습니다. 다른 아이디어? – panzi

관련 문제