我是一位经验丰富的PHP开发人员,但他是RoR的新手,并试图了解每件事情的运作方式。我知道如何使用flash hash,即在我的action方法中,我将设置
flash[:notice] = 'some message'
在我看来,我会展示出来。
这种机制也在Yii框架中实现。我明白它是如何工作的。我不明白的是它在RoR中的实际工作方式。 flash
只是一个局部变量,那么如何在我的视图中访问它?
答案 0 :(得分:4)
flash
实际上是一种方法。它不在您的控制器中,而是Rails控制器delegates到request 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
个变量(session
,params
,flash
是我能想到的3个)
要从视图中调用,您只需要引用此局部变量,如下所示:
<%= flash[:key] %>