Можно ли сделать так, чтобы вспышка [: извещение] появлялась над или перед вспышкой [: ошибка]? - PullRequest
0 голосов
/ 05 апреля 2010

Итак, я хотел бы иметь возможность отображать как вспышку [: note], так и вспышку [: error] в одном действии, но я бы хотел, чтобы уведомление: всегда отображалось выше (или перед ) Ошибка. Есть ли способ сделать это?

В моем контроллере я думал, что мог бы просто кодировать вспышку [: error] до вспышки [: note], чтобы рельсы отображали ее правильно, и это происходит в подавляющем большинстве случаев. Но время от времени они случайным образом переключаются, и я не могу понять, почему. Итак, как я могу убедиться, что вспышка [: note] всегда отображается над: error?

Редактировать: Благодаря совету Бена и Райана, я только что установил условия в файле макета / приложения.

    <% if flash[:notice] %>
        <div id="flash_notice"><%= flash[:notice] %></div>
    <% end %>

    <% if flash[:error] %>
        <div id="flash_error"><%= flash[:error] %></div>
    <% end %>

Я очень доволен этим, но, может быть, есть еще лучший способ?

Редактировать # 2: Да, есть. Бен добавил это к своему ответу ниже. Еще раз спасибо, мистер Бен.

Ответы [ 3 ]

4 голосов
/ 05 апреля 2010

Порядок отображения зависит от вашего кода просмотра. Если вы делаете это в вашем контроллере:

flash[:notice] = "Notice me"
flash[:error] = "BAAAAADDDD"

А это по вашему мнению:

<p><%= flash[:notice] %></p>
<p><%= flash[:error] %></p>

уведомление: всегда будет появляться первым.

Попробуйте это для более элегантного подхода. Порядок, который вы определяете в массиве, - это порядок, в котором они будут отображаться:

<% [:error, :notice].each do |condition| %>
  <%= "<p class='#{condition.to_s}'>#{flash[condition]}</p>" if flash.has_key?(condition) %>
<% end %>
1 голос
/ 05 апреля 2010

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

  <% flash.each do |k, v| %>
    <div id='flash_<%= k %>'><%= v %></div>
  <% end %>

В 1.8 ключи хеша неупорядочены, и поскольку flash - это Hash, вы получите эти выходные данные в любом порядке, который Ruby чувствует в то время. Как предложил Бен, правильное размещение их в правильном порядке поможет.

1 голос
/ 05 апреля 2010
Always nil your notice and error object.

<% if flash[:notice] %><p><%= flash[:notice] %><% flash[:notice]=nil %></p><% end %>
<% if flash[:error] %><p><%= flash[:error] %><% flash[:error] =nil %></p><% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...