您如何(并且应该)从视图中访问闪存,会话和控制器实例变量?

时间:2013-02-06 20:42:07

标签: ruby-on-rails ruby-on-rails-3

我首先要说的是,这是从有用的消息开始的,比如你设置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正确整合。

0 个答案:

没有答案