2016-03-22 46 views
1

Rails 5アプリケーションでは、アクティブモデルシリアライザ0.10.0.rc4を使用しています。私はjsonハッシュでリレーションを含める必要があります。アクティブモデルシリアライザとの関連付け

私はこのシリアライザ持っている:

class GroupSerializer < ActiveModel::Serializer 
    attributes :id, :name, :subscription_ids, :nb_places, :description, 
    :schedule, :course_id 
end 

そして、私はこのようにそれを使用しています:私はなぜ理解していない

{"group"=>{:id=>1, :name=>"12", :subscription_ids=>[1, 2, 3], :nb_places=>12, :description=>nil, :schedule=>"12", :course_id=>1}} 

resource = Group.all 
ActiveModel::Serializer.serializer_for(resource).new(resource, include: :subscriptions).as_json 

そして、私はこれを持っているがサブスクリプションは含まれていません。シリアライザではhas_manyを使用したくないので、複数のルールがあるときに無限ループが発生します。

{"group"=>{:id=>1, :name=>"12", :subscription_ids=>[1], :nb_places=>12, :description=>nil, :schedule=>"12", :course_id=>1, :subscriptions=>[{:id=>1,:name=>'something'}]} 

私は何をすることができます。

私はこのような何かをしたいですか?

答えて

1

次のようなサブスクリプション方式で作成できます

attributes :subscriptions 

def subscriptions 
    object.subscriptions.as_json(only: [:id, :name]) 
end 
+0

申し訳ありませんが、私は明確ではないワスト。私はsubscription_idsを持っていますが、購読データはありません。私は質問を更新する。 – Dougui

+0

@Dougui私は自分の答えを更新しました。 – miligraf

+0

私はそれが正しいと思います。これは 'object.subscriptions.pluck([:id、:name])'で動作します。 'as_json'メソッドのように' include'のようなものを使うのが好きですが、もっと良い方法がない場合はあなたのソリューションを使います。ありがとう。 – Dougui

関連する問題