Мне не нравится рендеринг JS для выполнения клиентом в качестве ответа на запрос XHR:

  1. Тип содержимого ответа — 99% text/html, но он отправляется как application/javascript
  2. Поведение в значительной степени общее: визуализация вместо существующего элемента, добавление или обновление флэш-сообщения, перенаправление страницы и т. д.

Вместо этого я отображаю либо HTML, либо JSON. Если тип содержимого ответа — HTML, предполагается замена. Вы можете оставаться ненавязчивым, добавив атрибут data-replacement-target к любым элементам data-remote, указав селектор запроса для замены ответом. В качестве альтернативы вы можете всегда оборачивать ответы в элемент, а затем смотреть на оболочку, чтобы определить цель замены.

Для перенаправлений или флэш-сообщений мне обычно проще отображать JSON. Обработчик ответа подхватывает его и выполняет необходимое действие, либо устанавливая window.location, либо отображая новое флэш-сообщение на странице.

Результат: все JS моего приложения находится в соответствующей папке, никогда не распределяясь по представлениям.