0

プロジェクト用に新しい API を設計しており、ネストされた子を持つオブジェクトを json として返したいと考えています。そのために、RABL を使用することにしました。

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

私が考えた設計では、オプションのハッシュの下にいくつかのフィールドをオプションとして含める必要があり、残りは必須です。必要なフィールドは、json のルートのすぐ下に表示されます。したがって、説明しようとする出力は次のようになります。

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

上記の出力例は、必須フィールドの name と last name と、必須ではない住所と電話番号 (beels_to-has_many 関係でオブジェクトに関連付けられている) を示しています。name、last_name、および address は、ユーザーの DB フィールドです。

RABL で遊んで、私はこれまでのところ、この種の構造を作成することができませんでした。

助言がありますか?すべてのモデルにこれを実装する DRY の方法を探しています。

4

2 に答える 2

1

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

たとえば、null になる可能性があるすべてのプロパティを持つfather/show.rablカスタム ノードを表示します。:optional

次に、child/show.rabl同じロジックで を作成します。最後に、 に戻って子ノードを追加し、テンプレートfather/show.rablを拡張します。child/show.rablこのようにして、無制限のレベルの「オプション」を実現できます。

お役に立てば幸いです。

于 2012-08-13T15:03:08.457 に答える
0

この場合、自由形式のオプションを使用します。

https://github.com/nesquena/rablから

応答のルートレベルがどのオブジェクトにも直接マップされない奇妙なケースもあります。

そのような場合、オブジェクトを「false」に割り当てることができ、ノードを自由形式で構築できます。

object false
node(:some_count) { |m| @user.posts.count }
child(@user) { attribute :name }
于 2013-10-09T15:37:21.930 に答える