Rails мигает [: note] всегда ноль - PullRequest
8 голосов
/ 01 ноября 2011

Я не могу понять, почему мои виды рельсов не распознают вспышку [: извещение] или вспышку [: ошибка].Я продолжаю получать следующую ошибку относительно частичного представления.Конкретная ошибка:

ActionView :: Template :: Error (У вас есть нулевой объект, когда вы его не ожидали! Возможно, вы ожидали экземпляр массива. Ошибка возникла при оценке nil. []):

В моем контроллере у меня есть

  def index
    @organisms = Organism.all
    flash[:error] = "test"
    flash[:notice] = "test"
    respond_to do |format|
      format.html
      format.json  { render :json => @organisms }
    end
  end

В моем файле index.html.erb я отрисовываю партиал через:

<%= render "shared/flash" %>

Партиал имеетследующий код.

<div id="flashes">

  <% if flash[:notice] %>
    <p id="flash_notice" class="messages notice"><%= flash[:notice] %></p>
    <%= javascript_tag "$('#flash_notice').effect('highlight',{},1000);" %>
  <% end %>
  <% if flash[:error] || flash[:errors] %>
    <p id="flash_errors" class="messages errors"><%= flash[:error] || flash[:errors] %></p>
    <%= javascript_tag "$('#flash_errors').effect('highlight',{},1000);" %>
  <% end %>

  <% flash[:error] = flash[:errors] = flash[:notice] = nil %>
</div>

Однако, если вместо рендеринга частичного я добавлю <% = note%>, он выдаст уведомление.

Если я возьму частичный код и вставлю его в верхнюю часть файла index.html.erb, он будет правильно отображаться.Таким образом, я предполагаю, что я неправильно отображаю частичное представление?

Любая помощь очень ценится.Спасибо!

Ответы [ 2 ]

26 голосов
/ 22 ноября 2011

Не называйте свою частичную вспышку.Ruby on Rails создает локальную переменную с тем же именем, что и частичное.В вашем случае создается локальная переменная flash.

Переименуйте вашу частичку во что-то отличное от flash, и она должна работать.

Кроме того, вам не нужно устанавливать flash на nil внижняя часть вашего частичного.Пусть Rails позаботится об этом за вас.

2 голосов
/ 22 ноября 2011

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

<%= render 'shared/flash', flash: flash %>

Или немного дольше:

<%= render partial: 'shared/flash', locals: { flash: flash } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...