Rails 3 / Контроллер / Flash хэш - PullRequest
1 голос
/ 01 февраля 2011

Я хочу иметь возможность передавать несколько сообщений во флэш-хэш внутри моего контроллера и отображать их вместе, например, в маркированном списке. Для этого я создал вспомогательную функцию в моем Application Controller, которая форматирует массив в маркированный список, который я затем передаю, в моем случае, flash [: success]. Это явно не Rails Way, потому что мой маркированный список закодирован. То есть вместо получения:

  • Сообщение 1
  • Сообщение 2

Я получаю:

  • Сообщение 1
  • Сообщение 2

Я уверен, что смогу найти способ использовать raw () для вывода, но разве нет простого способа заставить что-то подобное работать? Возможно, есть возможность перейти на flash []? Что-то еще?

Ответы [ 3 ]

3 голосов
/ 13 марта 2011

Я использовал render_to_string и частичное вместо помощника для достижения чего-то похожего.

# app/controller/dogs_controller.rb
def create
  @dog = Dog.new(params[:dog])
  @messages=[]
  if @dog.save
    @messages << "one"
    @messages << "two"
    flash[:notice] = render_to_string( :partial => "bulleted_flash")
    redirect_to(dogs_path)
  else
    render :action => 'new
  end
end

Затем я форматирую массив флеш-сообщений в списке HTML

# app/views/dogs/_bulleted_flash.html.erb
<ol>
  <% @messages.each do |msg| %>
  <li><%= msg %></li>
  <% end %>
</ol>

, который производит следующий HTML

# http://0.0.0.0:3000/dogs
<body>
  <div id="flash_notice">
    <ul>
      <li>one</li>
      <li>two</li>
    </ul>
  </div>
  ...
</body>

Если вам нужно продолжить использовать помощника, то я думаю, что вам нужно добавить метод html_safe к вашей строке, чтобы предотвратить его кодирование (что по умолчанию делает rails 3). Вот вопрос, показывающий, как использовать html_safe подобным образом

0 голосов
/ 01 февраля 2011

Обычно я бы попросил дополнительную информацию о ваших видах и макетах в этой ситуации, потому что леса не отображают flash[:success] по умолчанию.

Способ, который я решаю, - это обычно полностью повторять мои флеш-сообщения, делая flash[:whatever] массив каждый раз, и в моей компоновке обрабатываю этот массив вместо просто уведомления.Помните, что флэш-память - это просто хэш, вы просто устанавливаете значения.

Однако, если вы просто хотите сделать это с настройками, которые у вас есть сейчас (вспомогательный способ поместить HTML-код в flash[:success]), вы можете изменитьспособ отображения флэш-сообщений в файле макета.По умолчанию они просто используют <%= flash[:success] %>, который автоматически экранирует HTML.Чтобы сделать это не для флэш-сообщений, измените его на <%=raw flash[:success] %>

0 голосов
/ 01 февраля 2011

Если вы используете Rails3, попробуйте метод raw.

raw(my_html_string)

И это не ускользнет от HTML.Ой, простите, я только что прочитал ваше последнее предложение.Проверьте эту информацию, "Проблемы с флеш-сообщениями в Rails 3", похоже, это то, что вы ищете:

http://www.ruby -forum.com / topic / 215108

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