0

我首先应该说这是从有用的消息开始的,例如您在设置 Devise 时收到的消息(从 v. 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>

至少有三种方法可以从控制器获取信息到视图中。您可以将内容放入会话中,然后放入闪存中,或在控制器中设置实例变量。我看到了使用视图中的一个裸变量访问闪存和会话的示例,这打开了发生冲突的可能性。例如,我可以有一个这样的控制器:

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”或“会话”。

我在这方面找不到任何明确的文档 - 书籍和教程大多参考闪存和会话作为事后的想法,所以我想它可能会在未来的版本中改变。但是,我很想看到一个指向引用的指针,以及我应该做些什么来避免将来损坏的建议,同时保持我的代码尽可能清晰/简洁。

现在,我想确保我与 Devise 正确集成。

4

0 回答 0