在format.html和format.js之间显示Rails Flash消息?

时间:2012-01-14 06:52:39

标签: javascript jquery ruby-on-rails ruby-on-rails-3

我想在普通的HTTP用户和我能够设想的UJS人员之间更清楚地分享FlashHash通知。请允许我向您展示我的第一个:

首先,相关控制器respond_to的{​​{1}}部分的一部分:

#update

respond_to do |format| if @cont.save flash[:notice] = 'Continent was successfully updated.' format.html { redirect_to edit_continent_url(@cont) } format.json { head :ok } format.js 匹配:

update.js.erb

同样在我的$('#jsflash').html('<%= escape_javascript(render :partial => "application/notices/notice") %>').show(); <% flash.clear %> # clear the flash to avoid displaying on page reloads 中有

application.html.erb

<div id="jsflash"></div> <%= render "application/notice/alert" %>

app/views/application/notices/_notice.html.erb

我不喜欢的事情:

  1. 也许这是肛门,但我宁愿不渲染<% unless flash[:notice].blank? %> <div class="alert-message info fade in" data-alert="alert"> <a class="close" href="#">&times;</a> <%= content_tag :p, flash[:notice] %> </div> <% end %> ,除非我绝对不得不这样做。
  2. 更新js中的<div id="jsflash"></div>存在,以便在页面重新加载时清除闪存。但是,由于每个JS视图都需要使用可能会忘记包含它,因此会变得非常繁琐且容易出错。
  3. <% flash.clear %>,同样地,这是一个混乱的角色,视图驱动应用程序状态。
  4. 似乎应该有一些设施。我忽略了什么吗?

1 个答案:

答案 0 :(得分:1)

  1. 为避免在不需要时呈现<div id="jsflash"></div>,您需要将flash块包装在if语句中。您可以在Application.rb
  2. 中添加类似的内容

     <% if flash.present? %>
       //Call your Render Flash Here
     <% end %>
    

    2.3.4。我从来没有在我制作的几十个flash应用程序中使用flash.clear。你的flash调用似乎也有一些不必要的重复。