Rails 3 - извещение и ошибка не могут быть воспроизведены в частичном - PullRequest
5 голосов
/ 06 ноября 2011

Я пытался очистить application.html.erb, переместив части макета в частичные.У меня был следующий код для обработки ошибок / уведомлений флэш-памяти:

<div id="flash">
  <% if flash[:notice] %>
    <h3 class="info_box"><%= flash[:notice] %></h3>
  <% end %>
  <% if flash[:error] %>
    <h3 class="error_box"><%= flash[:error] %></h3>
  <% end %> 
</div>

Этот код прекрасно работал в application.html.erb, пока я не переместил его в файл с именем "_flash.html.erb" и заменил его следующим:

<%= render 'layouts/flash' %>

В частичном случае хэш-память флэш-памяти не была распознанным объектом и вызывает «У вас нулевой объект, когда вы его не ожидали!»ошибка.

Я переместил код обратно в application.html.erb и все хорошо.Но я не мог найти ответ для доступа к флеш-хэшу в частичном.Глядя на Руководство по Rails для «Рендеринга и макетов», я вижу, что у render() есть различные способы передать переменные в партиал, но мне не удалось его выяснить.Есть идеи?

Ответы [ 2 ]

17 голосов
/ 17 января 2012

Казалось, решение Голиатона сработало, но в конце концов это не сработало.Я узнал, что причина, по которой это не работает для меня, заключалась в том, что я назвал свой частичный _flash.Очевидно, Rails создает локальную переменную для партиала, используя имя партиала (без символа "_"). Поэтому у меня была переменная clash.Как только я изменил название частичного на другое, чем _flash, все заработало отлично.Я нашел ответ здесь: Rails flash [: note] всегда nil

1 голос
/ 10 декабря 2011

Вы можете поместить условную проверку для вспышки в макет, и, если она существует, визуализировать частичное:

<%= render 'layouts/flash' unless flash.nil?%>

Тогда, если он существует, он будет обработан как ожидалось.

...