如何在Rails中使用Flash消息

Baklib
Baklib 最后一次编辑 4 年多前
695
什么是即时消息?
即时消息是与Rails应用程序用户交流信息的一种方式,使他们可以知道由于其操作而发生的情况。
消息示例:
  1. “密码正确更改”(确认)
  2. “找不到用户”(错误)
您可以在控制器中设置这些即时消息,然后在视图中呈现它们。然后,您的用户可以采取相应的行动。
让我们确切地了解其工作原理!

如何使用即时消息

您可以使用flash帮助程序方法处理这些通知消息。
它的行为很像Ruby哈希。
闪光灯对象有类似的方法keysany?each与您可以访问特定的消息[]
您可以设置哪些类型的即时消息?
默认情况下,您有:
获取我的终极Ruby秘籍表: 这个方便的7页PDF帮助您快速找到所需的Ruby语法,正在寻找的Ruby方法或您不太记得其名称的内置类。
  1. 注意
  2. 警报
这是一个使用方法的例子:
  1. 闪。alert = “找不到用户。”
或者,如果您喜欢:
  1. flash [ :alert ] = “找不到用户。”
(只有样式上的差异。)
您可以使用此代码内部控制器的操作,如indexcreatenew,等。
另一种方法是这样的:
  1. redirect_to :books_path ,注意:“找不到书”
这样一来,您就可以重定向和创建Flash消息。
真好!

警报与通知

据我了解,您使用alert还是并不重要notice
使用对您的情况更自然的一种。
我想将其alert视为错误消息和notice确认消息。
分开它们可以帮助您设计不同的样式。
例如:
您可以将警报显示为红色,将通知显示为绿色。
也可以使用add_flash_typescontroller方法创建自己的Flash类型。
像这样:
  1. 类ApplicationController
  2. add_flash_types :info ,:error ,:warning
  3. 结束
我喜欢使事情保持简单,所以我坚持使用内置类型 

呈现Flash消息

Flash消息不会自动显示。
您必须在一个视图中渲染它们,以便用户可以看到它们。
考虑将其添加到您的应用程序布局中
这是一个代码示例:
  1. < %flash.each做| msg |类型 %>
  2. <div>
  3. <%=味精%>
  4. </ div>
  5. < %结束%>
将此放置在您想要显示通知的任何地方,通常在页面顶部菜单栏下方。
请记住:
呈现消息后,该消息将从中删除flash,因此不会再次显示。

设置您的通知和警报消息

Flash消息没有任何内置设计或样式。
解?
如果您使用的是Bootstrap,则可以使用"alert alert-info"CSS类使Flash消息看起来不错。
范例:
  1. < %flash.each做| msg |类型 %>
  2. <div class = “警报警报信息” >
  3. <%=味精%>
  4. </ div>
  5. < %结束%>
看起来像这样:
如果您不使用Bootstrap,则可以编写自己的CSS,以使其具有所需的外观。

Flash消息何时呈现?

显示Flash消息后,仅在您执行下一个控制器操作时才将它们删除。
含义:
  1. 如果您redirect_to,然后flash发送一条消息,那很好
  2. 如果您redirect_to不提供消息,则消息将在flash哈希中停留
  3. 如果您render采取与设置flash消息相同的操作,则该flash消息将可用,但不会被删除,因此它将一直存在并有可能显示两次
所以…
如果要为当前操作设置即时消息该怎么办?
那就是flash.now进来的地方!
这是一个例子:
  1. 定义指数
  2. @books = 书。所有
  3. 闪。现在[ :notice ] = “我们正好提供#{@books.size}本书。
  4. 结束
这将渲染index视图。
notice邮件将显示并从中删除,flash因此不会显示两次。
换句话说:
flash.now在要render重定向时才需要使用。