2012-02-22 4 views
24

Мне интересно, что лучше всего отображать флеш-сообщения. Два основной способ, которые я видел использую что-то вроде этого эшафота сгенерированного кодаЛучший способ отображения флэш-сообщений

<p id="notice"><%= notice %></p> 

или размещений кода, как это в заголовке приложения.

<% if !flash.empty? %> 
    <div id="flash"> 
     <% flash.keys.each do |k| %> 
      <div class="<%= k %>"> 
       <%= flash[k] %> 
      </div> 
     <% end %> 
    </div> 
<% end %> 

Мне кажется, что первый метод добавляет больше гибкости в то время как последний улучшает читаемость кода и устраняет избыточность. Есть ли метод, который предпочитают большинство разработчиков rails? Как вопрос о том, как внедряются строительные леса? Это просто помощник, который обращается к флэш-хешу? Зачем беспокоиться об использовании помощника, когда вы можете напрямую использовать хэш-флэш? Спасибо

ответ

55

Я делаю это так:

<% flash.each do |key, value| %> 
    <%= content_tag :div, value, class: "flash #{key}" %> 
<% end %> 
+0

Предлагает ли это какие-либо конкретные преимущества, отличные от меньших строк кода? Спасибо – Steve

+1

Да, это уменьшает количество строк кода и улучшает читаемость кода. – zolter

+1

")" после "flash # {key}" не требуется, он выдает сообщение об ошибке –

2

Почему бы не поставить второй метод на вспомогательную функцию, чтобы он не влиял на читаемость кода на макетах?

+0

Мне нужно было использовать его только один раз в заголовке приложения, но если это стало более сухим, я предполагаю, что я бы поставил это в отдельном помощнике. Знаете ли вы, как работает помощник уведомлений, поскольку он выглядит, что леса уже делают это для вас, используя этот помощник уведомлений. Спасибо – Steve

+0

Вы можете использовать несколько раз в разных проектах, это похоже на все помощники Rails, которые вы используете один раз для каждого приложения, например, csrf_mete_tags. – fjyaniez

30

Calling частично сохраняет ваш application.html.erb даже чище ..

<%= render 'shared/flash_messages' if !flash.empty? %> 

.. и парциальное сделать что-то вроде того, что @zolter отметил:

<div id="flash_messages"> 
    <% flash.each do |key, value| %> 
    <%= content_tag(:div, value, :class => "flash #{key}") %> 
    <% end %> 
</div> 
+2

Но вы можете поместить все в частичный. Поскольку я всегда понимал, что вы в основном хотите просто выбросить вещи в части, которые повторяются во всем приложении. Если есть большие куски кода, тогда да также помещает их в частичное, но это ли это так? Я не знаю, и у меня недостаточно опыта, чтобы сделать этот звонок, но imho. Я не вижу смысла делать для него новый частичный. Спасибо – Steve

+3

[Один из способов использования partials - рассматривать их как эквивалент подпрограмм: как способ перемещения деталей из представления, чтобы вы могли лучше понять, что происходит.] (Http://guides.rubyonrails.org /layouts_and_rendering.html#using-partials-to-simplify-views) – user664833

Смежные вопросы