导轨4 - 闪光通知

use*_*289 24 ruby ruby-on-rails twitter-bootstrap ruby-on-rails-4

我还在我的rails 4演示网站上工作,我看到一件奇怪的事情.在控制器中它有一个这样的行:

format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
Run Code Online (Sandbox Code Playgroud)

这会在重定向页面中呈现一条Flash消息,这是预期的.但是,附加到消息div的css类alert alert-notice不是有效的Bootstrap警报类,比如alert-info.

为此闪存设置的类在哪里,我该如何自定义它?

此外,如果我通过ajax删除记录,是否有办法访问核心闪存容器以通过js显示消息,或者我是否必须显示/隐藏我自己的flash消息div只是为了ajax请求?

编辑:我的Michael Hartl受到启发layouts/application.html.erb:

<div class="container">
  <% flash.each do |key, value| %>
    <div class="alert alert-<%= key %>"><%= value %></div>
  <% end %>
  <%= yield %>
</div>
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑2:

也许在我原来的问题中我不够清楚.我完全理解在这种情况下如何在flash对象中设置类.我有兴趣学习如何notice:format.html块中使用和自定义.似乎应该有办法通过这个通知传递课程?或者这不是Rails的核心做事方式吗?

Kir*_*rat 39

application.html.erb,您将显示flash消息.

更新该代码如下

  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, class: "alert alert-info" %>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

您可以在class选项中添加要应用于Flash消息的类.

编辑

alert alert-notice因为alert alert-<%= key %>你的代码中的类设置.你打电话的时候redirect_to @widget, notice: 'Widget was successfully created.

flash使用key as notice和value 添加一条flash消息Widget was successfully created.,即,

flash[:notice] = "Widget was successfully created."
Run Code Online (Sandbox Code Playgroud)

编辑#2

format.html { redirect_to @widget, notice: 'Widget was successfully created.' }

notice: 'Widget was successfully created.'是传递给redirect_to方法的参数.它flash在此方法中添加到哈希.


Sac*_*our 30

将此添加到

应用程序/控制器/ application_controller.rb

class ApplicationController
  add_flash_types :success, :warning, :danger, :info
end
Run Code Online (Sandbox Code Playgroud)

然后你可以在控制器中执行此操作

format.html { redirect_to @widget, success: 'Widget was successfully created.' }
Run Code Online (Sandbox Code Playgroud)

只要你在布局中这样做了

<div class="container">
  <% flash.each do |key, value| %>
    <div class="alert alert-<%= key %>"><%= value %></div>
  <% end %>
  <%= yield %>
</div>
Run Code Online (Sandbox Code Playgroud)