什么是ruby on rails上的flash hash

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

flash[:notice] = 'some message' 

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

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

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

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

 <%= flash[:notice] %> 

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

 <%= flash.notice %> 

有关更多信息,请参阅文档 。

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

 <% if flash[:notice] %> 

<%= flash[:notice] %>

<% end %>

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

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

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

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

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

 <%= flash[:key] %>