2014-11-05 16 views
9

Ben projemde jigs api için raylar-api gem kullanıyorum ve bu amaçla benim nesneleri serileştirmek için aktif model serializer gem kullanıyorum ama bazı nesnelerin serileştirilmiş nasıl aktif model serializer kullanarak.aktif model serializer raylar-api gem ile çalışmayan

benim serileştiriciler klasörüne

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

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

içinde bir MessageSerializer var Ve

class Api::MessagesController < Api::BaseController 

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

end 

şöyle İletilerimin denetleyicisi olan Ama sorun müşteriye atılan serileştirilmiş nesne tüm alanları içinde içerdiğini olduğunu mesaj modeli yani; created_at, updated_at alanları da içerir.

Diziselleştirici kullanılmıyor gibi görünüyor.

Hatalı ne olabilirdi? Bu konuda çok fazla aradım ama bana yardımcı olan herhangi bir gönderi bulamadım.

Teşekkürler

+0

değişikliği bu ve bu da json hale değiştirin: @messages ve denemek bir kez – Gowri

+0

Hayır iyi değil. Api :: BaseController sınıfı ApplicaionController sınıfını devralır. Yani temelde aynı. – Gagan

cevap

15

, sen feryat şunlardır eklediniz? seri raylar-API varsayılan olarak yüklenmemesi nedeniyle var

include ActionController::Serialization

+1

Bu doğru çözümdür. gem asla düşürmeyin. – seoyoochan

10

Hangi AMS sürümünü kullanıyorsunuz?

Aynı sorunu yaşadım ve AMS sürümünü 0.9.X'den 0.8.X'e değiştirerek düzeltmeyi başardım. Bu, Gemfile'ınıza bir sürüm numarası ekleyerek yapılabilir.

gem 'active_model_serializers', '~> 0.8.0' 

Bu konuda AMS GitHub repo ile ilgili notlar vardır. Eski sürüme vermedi

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

+0

Teşekkürler! Bunu gerçekleştirmeden önce saatler harcadım! –

1

, ben farklı şeyler çalışırken biraz zaman geçirdim ve sonunda böyle bir desen olsun:

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

çirkin ama benim için hile yaptı . Bir has_many ilişkisi için

, böyle bir şey yapabilirsiniz: En BaseController olarak

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

.
Bunu yapmak zorunda: Sınıf Api :: sınıf Api :: MessagesController

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

Bu benim için hiçbir şey değiştirmiyor. Başka fikirlerin var mı? – panzi

İlgili konular