关于在应用程序控制器中使用或等于(|| =)的问题

时间:2011-07-28 21:06:53

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

我已经看到在应用程序控制器方法中经常使用或等于|| =来设置变量(如果它不存在)。最近在Railscasts 270.但我有一个问题..例如这个帮助方法

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

根据我的理解,如果@current_user尚不存在,则设置它。这意味着rails不必去数据库,获得性能等等。

但是我对@current_user的范围感到困惑。假设我们网站有两个用户。第一个(让我们称之为“bob”)来到网站并将@current_user设置为他的用户对象。现在当第二个(“john”)进来并且rails要求@current_user时...为什么用户对象仍然不是bob的?毕竟@burrent_user已经设置了一次,当bob命中网站,所以变量存在?

混淆。

1 个答案:

答案 0 :(得分:5)

前缀为@的变量是实例变量(即,它们是特定于类的特定实例的变量)。 John对网站的访问将由一个单独的控制器实例处理,因此不会为他设置@current_user