如何使用Twitter Bootstrap Rails gem定义Flash通知



我试图在控制器中设置flash通知,但似乎我只能定义:notice。当我试图定义:errors或flash[:errors]时,我得到了一堆错误。我目前正在处理这个问题,但所有的消息显然都是通知类型,而不是错误或警告。我想知道如何设置错误或警告而不是通知。我正在使用rails 3.2和twitter引导程序rails gem

在应用程序中.html.rb

<%= bootstrap_flash %>

manuals_controller.rb

class ManualsController < ApplicationController
  def create
    respond_to do |format|
      format.html { redirect_to root_url, notice:'MyManual was successfully created.' }
    end
  end
end

您使用的是seyhunak的twitter bootstrap rails gem中的flash助手。您可以自己设置代码,看看一切是如何工作的,而不是使用助手。

以下是我如何使用Twitter Boostrap设置Rails flash消息

Rails使用:notice和:alert作为flash消息键。Twitter Bootstrap提供了一个基类.aalert和其他类.aalert success和.aalert error(请参阅有关alerts的Bootstrap文档)。需要进行一些解析,以获得一条Rails"notice"消息,使其具有Twitter Bootstrap"alertsuccess"样式。任何其他消息,包括Rails的"alert"消息,都将使用Twitter Bootstrap的"alert-error"样式。

默认情况下,Twitter引导程序将绿色背景应用于.aalert成功,将红色背景应用于.ealert错误。Twitter引导程序提供蓝色背景的第三类.aalert信息。只要进行一点黑客攻击,就可以创建一个带有自定义名称的Rails flash消息,例如:info,它将与Bootstrap.alert-info类一起显示。然而,明智的做法是坚持Rails的惯例,只使用"alert"one_answers"notice"。早期版本的Rails使用"error",但目前的做法是使用"alert"而不是"error"

您可以在应用程序布局文件中直接包含显示flash消息的代码,也可以创建分部。下面是一个带有分部的例子。

首先,应用程序布局中的内容:

# app/views/layouts/application.html.erb 
.
.
.
<%= render 'layouts/messages' %>
.
.
.

接下来,应用程序布局中包含的部分:

# app/views/layouts/_messages.html.erb
# Rails flash messages styled for Bootstrap 3.0
# works with Rails 4.0 or Rails 4.1
<% flash.each do |name, msg| %>
  <% if msg.is_a?(String) %>
    <div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
      <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
      <%= content_tag :div, msg, :id => "flash_#{name}" %>
    </div>
  <% end %>
<% end %>

还有一个在控制器中设置两个不同闪光消息的例子:

class VisitorsController < ApplicationController
  def new
    flash[:notice] = 'Welcome!'
    flash[:alert] = 'My birthday is soon.'
  end
end

这个例子来自我写的一篇深入的文章:

Twitter引导程序和Rails

要获得一个可容纳四种不同闪存消息类型(成功、错误、警报、通知)的替代方案,请参阅使用Twitter Bootstrap的Rails闪存消息示例。

最新更新