2011-02-01 1 views
1

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

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

я получаю:

< ул > <Li> Сообщение 1 </li > <Li> Сообщение 2 </li > </ul >

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

ответ

3

Я использовал 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 к вашей строке, чтобы предотвратить его кодирование (по умолчанию это рельсы 3). Вот question showing how to use html_safe in a similar fashion

0

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

raw(my_html_string) 

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

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

0

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

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

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