在各个位置显示闪光灯通知

时间:2014-11-27 07:38:45

标签: ruby-on-rails

我有一个临时;迟到的lhs菜单有一个搜索功能来限制菜单选项。

有时用户可能会搜索不会返回结果的选项。

当搜索没有返回任何结果时,我想在搜索框上方显示一个flash通知,以便进行通信。

除了菜单flash之外,我还想使用flash来传达与视图主要部分中的表单操作相关的正常消息,例如记录保存,用户登录等。

是否可以在一个视图上显示多个Flash消息,或者有更好的方法来实现此目的吗?

1 个答案:

答案 0 :(得分:0)

我使用带有ajax的flash解决了相同的场景,这样我就可以使用id或类选择器来更新我应用中的任何地方的html。

使用ajax显示flash 在application_helper中添加

def flash_display
  response = ""
  flash.each do |name, msg|
    msg=msg 
    response = response + 
    content_tag(:div, msg, :id => "flash_#{name}",:class=>"alert alert-danger") do 
        "#{msg}".html_safe  
    end     
  end
  flash.discard
  response
end

创建js文件以使用id / class选择器显示flash消息,例如 ..... ajax_flash_error.js.erb

  <% if type==  "User" %>

     $('#flash_user').html("<%= escape_javascript raw(flash_display) %>");

     <% else %>

     $('#common_flash').html("<%= escape_javascript raw(flash_display) %>");
    <%end%>

以通常的方式从控制器发送flash消息 users_controller.rb

def create
    if user
      //do comething
      else
        respond_to do |format|  
            flash.now[:error]="You cannot edit this Image"
            format.js { render 'shared/ajax_flash_error',:locals=>{:type=>"User"}}
       end  
   end      
end

在布局或任何视图文件中显示Flash消息.... application.html.erb

<html>
<head></head>
<body>

<div id="common_flash">
  <% flash.each do |name, msg| %>
    <%= msg%>
  <%end%>
</div>

####some other view file,use other flash id
<div id="flash_user">
    <% flash.each do |name, msg| %>
    <%= msg%>
  <%end%>
</div>


</body>
</html>

通过这种方式,您可以使用具有唯一ID /类的多个div,并在整个应用程序中随时随地显示Flash消息

......希望它能帮助**