我首先要说的是,这是从有用的消息开始的,比如你设置Devise时的消息(截至2.2.3版):
Ensure you have flash messages in app/views/layouts/application.html.erb
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
至少有三种方法可以从控制器获取信息到视图中。您可以将事物放入会话中,然后放入闪存中,或在控制器中设置实例变量。我看到了在视图中使用裸变量访问flash和会话的示例,这可能会发生冲突。例如,我可以有这样的控制器:
class PerverseController < ApplicationController
def index
@msg = 'Message 1'
session[:msg] = 'Message 2'
# Note - this is where a real concern comes in, the previous page could
# have done anything! Though here I use flash.now to illustrate the point.
flash.now[:msg] = 'Message 3'
end
然后,如果我在视图中有以下内容:
<%= msg %>
似乎可以引用这三个值中的任何一个。实际上,视图中的上述代码对我来说是一个错误(在Rails 3.2上)。你需要明确地使用'@'或'flash'或'session'。
我找不到任何关于此的明确文档 - 书籍和教程主要是将Flash和会话作为事后的想法引用,所以我想它可能会在未来版本中发生变化。但是,我希望看到一个指向引用的指针,并建议我应该做什么以避免将来破坏,同时尽可能保持我的代码清晰/简洁。
目前,我想确保我与Devise正确整合。