Произвольно вложив некоторые атрибуты в рабл - PullRequest
0 голосов
/ 28 марта 2012

Я разрабатываю новый API для своего проекта и хочу вернуть объекты с вложенными дочерними объектами в виде json.Для этой цели я решил использовать RABL.

Я хочу, чтобы клиентская сторона могла понять, является ли объект действительным, и если нет, то какие поля отсутствуют, чтобы сохранить его правильно.

Дизайн, о котором я думал, должен включать некоторые поля как необязательные, под необязательным хешем, а остальные обязательны.Обязательные поля должны появиться прямо под корнем JSON.Поэтому вывод, который я пытаюсь описать, должен выглядеть примерно так:

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

В приведенном выше примере вывода описываются обязательные поля, имя и фамилия, а также необязательный адрес и телефоны (которые связаны сотношение has_many к объекту).имя, фамилия и адрес являются полями БД пользователя.

Игра с RABL До сих пор мне не удалось создать такую ​​структуру.

Есть предложения?Я ищу СУХОЙ способ реализовать это для всех моих моделей.

Ответы [ 2 ]

1 голос
/ 13 августа 2012

RABL действительно хорош в создании структур JSON на лету, поэтому я не понимаю, почему вы не смогли достичь своей цели. Вы пробовали проверить, не установлено ли в схеме значение null-able, и, таким образом, представить его как необязательный? Это кажется хорошим подходом для меня. Для вложенных детей просто сделайте то же самое, но расширьте шаблон для детей.

Например, в вашем father/show.rabl отобразится пользовательский узел :optional со всеми свойствами, которые могут быть нулевыми.

Затем создайте child/show.rabl с той же логикой. Наконец, вернитесь к father/show.rabl и добавьте дочерний узел, расширяя шаблон child/show.rabl. Таким образом, вы можете достичь неограниченного уровня «опций».

Надеюсь, это помогло вам.

0 голосов
/ 09 октября 2013

В этом случае я бы использовал опцию свободной формы.

С https://github.com/nesquena/rabl

Также могут быть странные случаи, когда корневой уровень ответа не отображается напрямую ни на один объект.

В этих случаях объекту можно присвоить значение «ложь». и узлы могут быть построены в свободной форме.

object false
node(:some_count) { |m| @user.posts.count }
child(@user) { attribute :name }
...