2017-08-25 13 views
1

コントローラからシリアライザへのデータではなく、シリアライザから別のものにデータを送ることができるかどうかを知りたいと思います。ここに私がやっていることがあります:Ruby on Rails 5 - 2つのシリアライザ間でデータを渡す

私はコントローラからシリアライザにデータを送ることが可能であることを知っています。しかしシリアライザから別のシリアライザにデータを送ることは可能ですか?

+0

どのようなデータオマールの種類は?何らかのオプション/パラメータのようなもの?またはシリアル化されたデータですか?あなたが提供した例でやっているコレクションだけ? – lavilet

+0

@lavilet:アクティブなレコードオブジェクトIDを送信したい –

答えて

0

はい。 AMS 0.10.xを使用して、あなたはこのような方法であなたの例を変更することができます:

serializer_1.rb

class Serializer1 < ActiveModel::Serializer 
    attributes :id, :past_teachings 

    def past_teachings 
    ActiveModelSerializers::SerializableResource.new(PastTeaching.all, each_serializer: TeachingSerializer) 
    end 
end 

teaching_serializer.rb:

class TeachingSerializer < ActiveModel::Serializer 
    attributes :id, :name 
end 

を使用すると、現在のオブジェクトがシリアライズされているアクセスしたい場合「オブジェクト」を参照することができます。オブジェクト関数はobject.functionとしてアクセスでき、その属性はobject ['attribute']としてアクセスできます。

(現実にはおそらく代わりに、AMSのhas_manyの関係を使用しますが)ので、技術的に、あなたはこのような何かを行うことができます:

class Serializer1 < ActiveModel::Serializer 
    attributes :id, :past_teachings 

    def past_teachings 
    ActiveModelSerializers::SerializableResource.new(object.past_teachings.where(...), each_serializer: TeachingSerializer) 
    end 
end 
関連する問題