S-anches
@S-anches
Любитель всего и вся.

Кто нибудь знает почему в Rails render_to_string не работает как ему полагается?

Всем привет. Пытаюсь третий день решить проблему. Надо отрендерить шаблон на рейлс в строку, есть метод render_to_string и render_to_body. Отрендерить надо так как эта строка должна отправиться в браузер sse.write.
s = render_to_string(partial: 'comment', formats: [:html], locals: {comment: comment})
b = render_to_body(partial: 'comment', formats: [:html], locals: {comment: comment})

Ни тот, ни тот не рендерят шаблон в строку. Если подключиться к странице curl то приходит шаблон как есть, многострочный. В браузере же если выдачу выводить с помощью js console.log например то приходит только первая строка шаблона. Ну оно и правильно, sse должен отправить одну целую строку.
Как блин побороться с этим? =)
Пока только одна идея появилась и она работает:
s = render_to_string(partial: 'comment', formats: [:html], locals: {comment: comment}).gsub("\n","")

Удалить все переводы строки.
  • Вопрос задан
  • 564 просмотра
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
Совершенно никакой проблемы в вашем вопросе не вижу
Хоть и не эксперт во вторых рельсах, но, думаю, не окажусь не правым, если предположу, что с версии 2.3.8 как это можно видеть, если какие-то недостатки и были в этом методе, они были устранены :)

В чем проблема ? В том, что console.log() выводить символы переноса строк (\n) вместо того, что бы переносить сроку, собственно ? Значит, проблема в том, что вы неверно стараетесь интерпретировать нужные данные.

В чем конкретно ваша задача сейчас?
Ответ написан
@fuCtor
Ruby разработчик
Тут либо удалять руками перенос строк, если не ошибаюсь в SSE он является разделителем полей, либо экранировать его. Либо (ИМХО правильный вариант) переписать на JSON общение, а на клиентской стороне выполнять рендеринг полученных данных в шаблон.

Вот есть не плохой пример на эту тему: www.sitepoint.com/mini-chat-rails-server-sent-events
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы