2012-03-28 8 views
0

私は自分のプロジェクト用の新しいAPIを設計しており、入れ子の子を持つオブジェクトをjsonとして返したいと思います。その目的のために私はRABLを使うことに決めました。rablの任意の属性をネストしています

オブジェクトを有効にするかどうか、正しく保存するためにはどのフィールドがないかをクライアント側で理解できるようにします。

私が考えた設計では、オプションのハッシュの下にオプションのフィールドを含める必要があり、残りは必須です。必要なフィールドは、jsonのルートのすぐ下に表示されます。 だから私は説明しようとする出力は次のようになります。上記の出力例では、必要なフィールド名と姓、およびbelongs_toの-にhas_manyに関連付けられている必要はないアドレスと電話が(説明

{ 
    "name": "John", 
    "last_name": "Doe", 
    "optional": { 
     "address": "Beverly Hills 90210", 
     "phones":[{"number":"123456","name":"work"}, {"number":"654321","name":"mobile"}] 
    } 
} 

をオブジェクトとの関係)。 name、last_nameおよびaddressはユーザのDBフィールドです。

RABLで遊ぶこの種の構造を作成するためにこれまで管理していなかった。

提案がありますか?私はすべての私のモデルのためにこれを実装するDRY方法を探しています。

答えて

1

RABLは、実際にJSON構造を作成するのに本当にうれしいので、目標を達成できなかった理由はわかりません。フィールドがスキーマ内でヌル可能に設定されているかどうかをテストして、それをオプションとして表示しようとしましたか?それは私のための良いアプローチのようです。ネストされた子の場合は、同じことを行いますが、子のテンプレートを拡張します。

たとえば、father/show.rablには、すべてのプロパティがnullのカスタムノード:optionalが表示されます。

次に、同じロジックでchild/show.rablを作成します。最後にfather/show.rablに戻り、子ノードを追加してchild/show.rablテンプレートを拡張します。あなたは「オプション」を無制限に達成することができます。

あなたのお役に立てば幸いです。

0

この場合、フリーフォームオプションを使用します。

https://github.com/nesquena/rabl

よりも応答 のルートレベルは、任意のオブジェクトに直接マップされない奇数の場合があり得ます。

これらの場合、オブジェクトは「偽」 に割り当てられ、ノードは自由形式で構成できます。

object false 
node(:some_count) { |m| @user.posts.count } 
child(@user) { attribute :name } 
関連する問題