我正在我的控制器中进行一些异常处理,当抛出异常时:create action,我将渲染到:new action并显示flash消息.
一切正常,我可以在异常捕获时看到flash消息,但是当我重定向到(手动点击)其他页面时,flash消息仍然在这里.然后我重定向到另一个页面(第二次手动点击),消息可能会消失.
有谁知道是什么原因?
我的控制器代码:
class MessagesController < ApplicationController
rescue_from Exception, :with => :render_new
def new
end
def create
end
private
def render_new
flash[:alert] = t("uploading_error")
render :action => :new
end
end
Run Code Online (Sandbox Code Playgroud)
我的布局代码(Haml):
%body
#content
- unless flash[:alert].blank?
#alert= flash[:alert]
Run Code Online (Sandbox Code Playgroud)
Zab*_*bba 160
更换
flash[:alert] = t("uploading_error")
Run Code Online (Sandbox Code Playgroud)
同
flash.now.alert = t("uploading_error")
Run Code Online (Sandbox Code Playgroud)
看看这是否是您期望的结果?
flash[:alert]
将留在下一页(因此它只会在第二次重定向时消失); 但flash.now.alert
只会显示当前页面.
Max*_*ams 45
在flash.now和普通闪光之间做出决定是一种痛苦的屁股,而且我的经历非常脆弱.我使用普通闪光然后修改我的部分显示闪光灯,以便在用户看到闪光灯后删除每个闪光灯的内容.我认为这更好,因为
a)你不必考虑它
b)"让用户看到了吗?" (即"闪烁部分被渲染出来?")是决定是否清除闪光灯的最佳标准,而不是应用程序中的任何逻辑.
我的flash部分看起来像这样 - 我也使用了一些jquery来突出闪烁(即让它们闪烁黄色一秒钟):
<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>
Run Code Online (Sandbox Code Playgroud)
Cod*_*ave 31
另一种方法是在部分结尾处使用flash.clear,如下所示:
<% if !flash.empty? %>
<div class="flash-messages-container">
<% flash.each do |name, msg| %>
<% if msg.is_a?(String) && [:success, :info, :error, :warning].include?(name) %>
<div class="flash-message" data-type="<%= name %>" >
<%= msg %>
</div>
<% end %>
<% end %>
</div>
<% flash.clear %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38304 次 |
最近记录: |