什么是ruby on rails上的flash hash

时间:2014-05-04 07:01:12

标签: ruby-on-rails flash

我是一位经验丰富的PHP开发人员,但他是RoR的新手,并试图了解每件事情的运作方式。我知道如何使用flash hash,即在我的action方法中,我将设置

flash[:notice] = 'some message'

在我看来,我会展示出来。 这种机制也在Yii框架中实现。我明白它是如何工作的。我不明白的是它在RoR中的实际工作方式。 flash只是一个局部变量,那么如何在我的视图中访问它?

3 个答案:

答案 0 :(得分:4)

flash实际上是一种方法。它不在您的控制器中,而是Rails控制器delegatesrequest object。因此flash方法在请求对象中定义,但您可以从控制器和视图中访问它。

检查ActionDispatch::Request代码的链接。闪存实际上在设置时存储在会话中。用户下次请求页面时,可以在视图中使用Flash。

在您的视图中,您可以像这样访问它:

<%= flash[:notice] %>

或者以美学上更愉快的方式(这只能通过通知和警报来完成,因为它们经常被使用):

<%= flash.notice %>

有关详细信息,请参阅documentation

答案 1 :(得分:0)

&#39;闪光灯&#39;不是局部变量。这是会议的一部分,如会议&#39;哈希值。这意味着会话散列(flash,session,cookies)是ActionController :: Base和ActionView :: Base之间的共享值。因此,可以从控制器和视图访问会话哈希。为了访问视图中的flash,只需像在控制器中使用它一样使用它。参考您之前的代码,您将打印出如下通知:

<% if flash[:notice]  %>
<p><%= flash[:notice] %></p>
<% end %>

有关此主题的进一步参考,请结帐:guides

答案 2 :(得分:0)

flash哈希基本上是一个用每个controller/action请求填充的变量,然后在执行请求后重置。正如Adilbiy Kanzitdinov所提到的那样 - 它设置在session哈希:

  

flash提供了一种在操作之间传递临时对象的方法。   你放在闪光灯中的任何东西都将暴露在下一个闪光灯中   行动然后清除。这是做通知的好方法   警报,例如设置flash [:notice] =&#34; Post的创建操作   成功创建了#34;在重定向到可以显示的操作之前   然后将闪光灯曝光到其模板。实际上,曝光是   自动完成。

您需要记住ROR是全栈,这意味着它有一堆中间件,用于为用户创建最有效的响应。这允许您设置local个变量(sessionparamsflash是我能想到的3个)

要从视图中调用,您只需要引用此局部变量,如下所示:

<%= flash[:key] %>