ruby-on-rails - Rails 中的 `flash` 如何成为应用程序的全局地址?

标签 ruby-on-rails ruby

我很好奇 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/

相关文章:

ruby-on-rails - Searchkick:Elasticsearch 没有索引 "FORBIDDEN/12/index read-only"?

javascript - Rails 无法将 AJAX 数据发送到 Controller

ruby-on-rails - 如何在生产中运行 Rails Web 控制台?

ruby-on-rails - 在 Rails 3 的模块内定义范围的最佳方式是什么?

javascript - 使用 Google map 和 Ruby 添加标记

ruby-on-rails - IntelliJ Ruby 语法高亮显示

ruby-on-rails - 基本 rails 问题

ruby - 我如何重构调用不同函数但对它们的响应执行相同操作的 ruby​​ 代码?

ruby-on-rails - 如何从 URL 下载每个 zip 文件并使用 Rails 解压

ruby-on-rails - 无法将 Rails 应用程序部署到 heroku