Должен ли я использовать шаблон для визуализации JSON или использовать контроллер, возвращающий JSON в RoR? - PullRequest
3 голосов
/ 01 сентября 2010

Это мое большое сомнение.

У нас есть проект в RoR, и мы делаем его более динамичным, используя вызовы Ajax. Они хотят, чтобы я поместил буквальный JSON в html-шаблоны и проанализировал его с помощью eval () в javascript, избегая помещения исключения в Controller для возврата ответа в виде JSON напрямую.

Пример: WhwhatControoler # index -> отобразит views / what_controller / index.html.erb (литерал JSON в HTML-шаблоне):

{
"Success": "false",
"Date": ("need_login": "true")
}

Что я предлагаю использовать в WhwhatControoler # index

render :json => (: success => false, :data => (:need_login => true))

Вместо того, чтобы поместить его в Controller, они хотят, чтобы я использовал шаблон, который Controller будет отображать в обычном режиме, чтобы показать буквальный JSON.

В некоторых контроллерах есть блоки "начинать / поднимать", которые перенаправляют в другие места, из-за этого мне нужно поместить исключения для рендеринга JSON вместо перенаправления.

if (is_ajax) render :json[..] else redirect_to [..] end

Мне нужна веская причина, чтобы избежать этого и показать, что это неправильно.

Это имеет смысл? Я пытался объяснить, в лучшем случае, я могу.

PS: я знаю, что я мог бы использовать «response_to do | format | ...», но мне нужно, как если бы отчеты из-за перенаправлений, код уже запутался, и они хотят избежать еще большего количества ошибок

Ответы [ 2 ]

3 голосов
/ 01 сентября 2010

Избегайте использования шаблонов, если можете.Вот хороший список причин:

  • Если вы используете render: json, Rails позаботится обо всем остальном.Он настроит правильный тип MIME, преобразует содержимое и отобразит правильно сформированный ответ JSON.
  • Пропуск рендеринга шаблона повышает производительность.
  • JSON предназначен для однострочного ответа.Если вы отображаете шаблон с JSON-подобным ответом, вы, вероятно, собираетесь вернуть менее легкий ответ.
1 голос
/ 01 сентября 2010

С моей точки зрения, основной недостаток генерации json через erb заключается в том, что вы не уверены, что ваш json будет действительным (но я думаю, это та же проблема с html).Вам также придется установить тип mime самостоятельно.

to_json хорошо протестирован, и вы можете ожидать, что вывод будет действительным JSON.

Основная проблема с to_json заключается в том, чтоон не может сгенерировать все json, которые вы хотите, и некоторые просили, например, json builder (см. этот ticket )

Так что мой совет будет, если вы не ограниченыto_json использовать to_json в контроллере и в конечном итоге генерировать его через erb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...