Rails 3.1.4 - Визуализация: текст - PullRequest
5 голосов
/ 30 марта 2012

Я обновляю свои приложения rails 2 до rails 3 и обнаруживаю, что использование render: text больше не ведет себя так же.

@ results - массив. В моем контроллере:

render :text => "<ul>#{@results}</ul>"

Он возвращает весь массив в виде строки, а не повторяет каждое значение:

<ul>
  ["
  <li>Steve</li>
  ", "
  <li>John</li>
  "]
</ul>

Хорошо работал в Rails 2.x, но не в 3. Как мне это исправить?

Я ожидаю результата:

<ul>
  <li>Steve</li>
  <li>John</li>
</ul>

Ответы [ 3 ]

11 голосов
/ 14 апреля 2018

Я знаю, что этот вопрос только для Rails 3.1.4.

Но те, кто пришел сюда и имеют более свежую версию, начиная с Rails 5.1, сделают следующее:

render plain: "I'm like everyone else."
10 голосов
/ 05 марта 2014

Строка содержит HTML-теги, поэтому вам нужно будет пометить ее как безопасную, чтобы Rails не экранировал теги.

render :text => "<ul>#{@results}</ul>".html_safe

ПРИМЕЧАНИЕ. Если у вашего контроллера нет веской причины, я рекомендую переместить элементы списка в представление.

6/23/2014 ОБНОВЛЕНИЕ: ретроспективно, мне не нравится иметь эту логику разбора строки в контроллере. @results предполагает, что HTML-объект внедрен в объект где-то. Я рекомендую использовать объект презентации и вызывать метод, подобный @results.list. Драпированный камень хорошо подходит для этого.

Cite

1 голос
/ 30 марта 2012

Я бы предложил сделать вместо рендера следующее: текст

render :partial => "result", :collection => @results

и добавьте файл: _result.html.erb с

<ul>
  <%= result %>
</ul>

или даже лучше, если вы можете удалить теги li из @ results

<ul>
  <li><%= result %></li>
</ul>

В документации Rails 3 сказано, что текст рендеринга должен использоваться для текста без HTML, что не соответствует вашему варианту использования. Использование render :part: collection - лучший и более удобный способ 3 итерировать ваш список.

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