2011-12-27 9 views
3

has_many & has_oneの関係をJSONレンダリングに含める方法はすでにわかっています。私はそうするときに特定の属性を除外する方法を知っています。知らない人のためにここで良い記事です:レールオブジェクトの関係とJSONレンダリング

Rails Object Relationships and JSON Rendering

しかし、私は何をするのか分からないが、私は再宣言する必要はありませんので、それは子オブジェクトにas_jsonを使用していていますそれはすべての親の関係上です。

私はこのような何か...

class Customer < ActiveRecord::Base 
    has_many :orders 

    def as_json(options={ }) 
    super({ :except => :Password, :include => [:orders] }.merge(options)) 
    end 
end 

class Order < ActiveRecord::Base 
    has_one :customer 

    def as_json(options={ }) 
    super({ :include => [:customer] }.merge(options)) 
    end 
end 

を持っているのであればそれはあなたの注文の観点からそれを見たときにお客様のパスワードを返送してしまいます。

理想的にはモデルで定義されているas_jsonのルールに従ってほしいので、すべての子オブジェクトにcustomerを含めるために例外を置く必要はありません。

P.S. - これは現実世界のシナリオではない例です。

答えて

2

RABL gemを使用して、すべてのモデルにas_jsonを上書きすることをお勧めします。必要なパラメータ/リレーションシップのみを使用してJSONレスポンスを定義する方がはるかに簡単です。親/子の入れ子を簡単に作成することもできます。

https://github.com/nesquena/rabl

+0

rablを使用してどのように出力を動的に変更しますか?ときには、誰がデータを要求しているかに基づいてjsonで返される内容を変更したいことがあります。 – Altonymous

+0

通常と同じRuby構文を使用します(つまり、if文と 'unless'文)。 – iwasrobbed