Ruby on rails 有没有办法使flash[:notice]显示在flash[:error]的上方或之前?

Ruby on rails 有没有办法使flash[:notice]显示在flash[:error]的上方或之前?,ruby-on-rails,Ruby On Rails,因此,我希望能够在同一动作上同时显示flash[:notice]和flash[:error],但我希望:notice始终显示在错误上方(或之前)。有办法做到这一点吗 在我的控制器中,我认为我可以在flash[:notice]之前对flash[:error]进行编码,这样rails就可以正确地显示它,而且它在绝大多数时间都会显示。但它们时不时地被随机切换,我似乎不明白为什么。那么,我如何确保flash[:notice]始终显示在:error上方 编辑:感谢Ben和Ryan的建议,我现在刚刚在布局/

因此,我希望能够在同一动作上同时显示flash[:notice]和flash[:error],但我希望:notice始终显示在错误上方(或之前)。有办法做到这一点吗

在我的控制器中,我认为我可以在flash[:notice]之前对flash[:error]进行编码,这样rails就可以正确地显示它,而且它在绝大多数时间都会显示。但它们时不时地被随机切换,我似乎不明白为什么。那么,我如何确保flash[:notice]始终显示在:error上方

编辑:感谢Ben和Ryan的建议,我现在刚刚在布局/应用程序文件中设置了条件

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

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

我对此很满意,但也许有更好的方法


编辑2:是的,有。本在下面的回答中补充了这一点。再次感谢本先生。

显示顺序完全取决于您的查看代码。如果在控制器中执行此操作:

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 %>

显示顺序完全取决于您的查看代码。如果在控制器中执行此操作:

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 %>

始终为零通知和错误对象。

始终为零通知和错误对象。


我想对此发表评论,但它不能很好地处理多行代码片段。它们可能是“随机切换”的,因为您正在这样使用它:

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


在1.8中,散列键是无序的,因为
flash
是一个
hash
,所以您将以Ruby当时感觉的任何顺序获得这些输出。正如Ben所建议的,手动将它们按“正确”的顺序排列会有所帮助。

我会对此进行评论,但它不能很好地处理多行代码段。它们可能是“随机切换”的,因为您正在这样使用它:

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


在1.8中,散列键是无序的,因为
flash
是一个
hash
,所以您将以Ruby当时感觉的任何顺序获得这些输出。正如Ben所建议的,手动将它们按“正确”顺序排列会有所帮助。

只是好奇,为什么总是将通知和错误对象置零?如果不置零通知和错误对象,则如果将它们呈现到另一页,则会出现相同的通知/错误。我也遇到过同样的问题,所以我养成了一个习惯,一旦我出现在视图中,就不会有任何通知/错误。Chee的行为是故意的。如果您不希望flash被传递到下一个操作,您可以使用
flash。现在改为
。也谢谢Salil。正如JRL所指出的,您只需闪存即可。现在[:error],它将在下一个操作中自动清除。这就是我在这个例子中使用的。只是好奇,为什么你总是将通知和错误对象置为零?如果你不将通知和错误置为零,那么如果你在另一个页面上呈现相同的通知/错误就会出现。我也遇到过同样的问题,所以我养成了一个习惯,一旦我出现在视图中,就不会有任何通知/错误。Chee的行为是故意的。如果您不希望flash被传递到下一个操作,您可以使用
flash。现在改为
。也谢谢Salil。正如JRL所指出的,您只需闪存即可。现在[:error],它将在下一个操作中自动清除。这就是我在这个例子中用到的。谢谢Ben。我只是依赖于我在应用程序布局中定义的代码(类似于Ryan Bigg在下面指出的代码)。我不知道除了应用程序布局中的常规代码之外,我还可以为这样的特定视图指定它们的顺序。再次感谢你,本先生。编辑:我不是说除了版面/应用程序文件中的常规代码之外。我刚刚使用了Ryan Bates的漂亮布局生成的内容。相反,我现在只定义了上面提到的闪烁,以及相应的CCS id。此外,我还必须包括闪光灯为空时的条件。我在问题中添加了代码,以防有更好的方法。再次感谢你。肯定有更复杂的方法做这件事——我只是想让你了解这个想法的核心。我会在我的答案中添加一些东西让你开始。那太优雅和干净了。我更喜欢我的代码更笨重和笨重。j/p,谢谢大本,我现在对flash的理解也好多了,非常感谢。
如果flash.has_key?(条件)
在Rails 3.1中不起作用,因为[在Rails 3.1中,FlashHash不是从Hash派生出来的]()使用
如果flash.include?(条件)
代替感谢本。我只是依赖于我在应用程序布局中定义的代码(类似于Ryan Bigg在下面指出的代码)。我不知道除了应用程序布局中的常规代码之外,我还可以为这样的特定视图指定它们的顺序。再次感谢你,本先生。编辑:我不是说除了版面/应用程序文件中的常规代码之外。我刚刚使用了Ryan Bates的漂亮布局生成的内容。相反,我现在只定义了上面提到的闪烁,以及相应的CCS id。此外,我还必须包括闪光灯为空时的条件。我在问题中添加了代码,以防有更好的方法。再次感谢你。肯定有更复杂的方法做这件事——我只是想让你了解这个想法的核心。我会在我的答案中添加一些东西让你开始。那太优雅和干净了。我更喜欢我的代码更笨重和笨重。j/p,谢谢你,本,我现在明白了