3

我已经看到或等于 ||= 在应用程序控制器方法中经常使用来设置变量(如果它不存在)。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 的?毕竟@current_user 在 bob 访问站点时已经设置了一次,所以变量存在?

使困惑。

4

1 回答 1

5

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

于 2011-07-28T21:12:05.413 回答