我很好奇 Rails 是如何做到这一点的。我注意到您可以在应用程序中全局访问 flash
变量,但它没有前缀 @
或 $
。
我还可以看到有一种方法可以访问 flash
还有一个 initializer也将设置 @flash
,但我如何将 flash
调用为局部变量?
最佳答案
session
根据 apneadiving
的回答,flash
是中间件堆栈 (ActionDispatch::Flash
) 的一部分。它实际上是一个非持久性 session
cookie:
--
来自 the docs :
The flash is a special part of the session which is cleared with each request. This means that values stored there will only be available in the next request, which is useful for passing error messages etc.
与 params
的工作方式非常相似(基于每个请求),flash
变量仅填充来自先前请求的数据。
--
中间件
如果你接受 apneadiving 的评论,你会看到 flash
是通过 middleware
堆栈创建的 - 这意味着本地性质变量的参数仅为该特定请求设置(与 params
非常相似)。这就是为什么您可以在任何 Controller 中访问/设置 flash
消息的原因 - 因为它被定义在“中间件堆栈”的更高层 - 它提供了一个看似全局的范围
我敢肯定像呼吸暂停这样的人可以比我更好地解释它,但这就是我的看法
关于ruby-on-rails - Rails 中的 `flash` 如何成为应用程序的全局地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133898/