Как я могу либо работать с ruby ​​на rails flash хэше вручную, либо создать свой собственный "custom" хеш для сообщений об ошибках? - PullRequest
0 голосов
/ 09 февраля 2011

В моем проекте rails 3 я пытаюсь создать последовательное диалоговое окно для отображения сообщения об ошибке / успехе, чтобы оно попадало в заголовок моей страницы.У меня есть отображение флеш-сообщений, когда они установлены с контроллеров, например:

  <% if flash.length > 0 %>

      <% flash.each do |key, value| %>

           <% if key == "error" %>
                <div class="notice error"><%= value %></div>
           <% elsif key == "success" %>
                <div class="notice success"><%= value %></div>      
           <% else %>
               <div class="notice regular"><%= value %></div>
           <% end %>

      <% end %>

  <% end %>

Но я хочу также иметь возможность отправлять в мой диалог пользовательские сообщения, которые приходят из тегов link_to, например:

<% if [certain variable is set] %>

    <% message = Hash.new %>
    <% message[type] = "specific message to be sent with this link" %>
    <%= link_to [Link option one] %>

<% else %>

    <%= link_to [Link option two] %>

<% end %>

, где "тип" - это либо "ошибка", "успех", либо что-то еще.

, когда я пытаюсь выполнить это, вручную помещая сообщение во флэш-хэш следующим образом:

 <% flash[:error] = "specific message to be sent with this link" %>
 <%= link to [Link option one] %>

... сообщение появляется, когда пользователь щелкает ссылку, но не удаляется после того, как пользователь нажимает другие ссылки.Сообщение остается во флэш-хеше, несмотря на мои попытки удалить его вручную.Сообщение отображается в заголовке независимо от того, на какую страницу переходит пользователь, даже если во флеш-хэш не добавлено ничего нового.

Когда я пытаюсь выполнить код с хешем «message» выше,проверяя «message» в моем заголовке и отправляя его откуда угодно, хеш, называемый «message», устанавливается не на всех страницах (только на страницу, на которую я отправляю).Понятно, что это приводит к ошибке

     undefined local variable or method 'message'

всякий раз, когда 'message' специально не задано на странице.Я пробовал такие вещи, как

      <% if message %>
           <%# show error message %>
      <% end %>

и

 <% if !message.nil? %>
      etc

, но я все еще получаю неопределенную ошибку.

Есть ли способ, которым я могу либо

a) вручную очистить определенное значение хеш-функции после отправки его вручную,

b) предотвратить возникновение ошибки «неопределенная переменная», когда «message» не определено,

или

в) решить эту проблему по-другому?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Сообщение появляется всегда, потому что вы всегда устанавливаете flash[:error], когда «установлена ​​определенная переменная».Вспышка в этом случае никак не связана с link_to.Вы должны установить flash[:error] в вашем контроллере для любого действия, на которое указывает link_to.

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

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

Вот несколько вещей, которые вы можете сделать:

  1. Вручную удалите флеш-сообщения с помощью flash.delete (: error).Это приведет к удалению flash [: error], а возвращаемым значением этой функции будет фактическое значение flash [: error], поэтому вы можете использовать его для замены <% = value%>, например, <% = flash.delete (key)%>.
  2. Проверьте, определена ли переменная вашего сообщения с помощью define? (message).Это должно избежать неопределенных ошибок.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...