Ruby on rails 在rails中的多个控制器之间传递变量

Ruby on rails 在rails中的多个控制器之间传递变量,ruby-on-rails,Ruby On Rails,我希望变量@user能够跨所有其他控制器访问。如何处理这个问题。在每次调用操作之间,变量都会被销毁 每次都必须重新实例化@user 为了使它干净,您可以在每次调用一个操作之前,在一个过滤器中销毁变量 每次都必须重新实例化@user 要使其干净,您可以在过滤器前的中执行此操作,如果您想要当前用户(例如),您可以在模型中创建一个方法/函数并调用它。如果您想要当前用户(例如),您可以在模型中创建一个方法/函数并调用它。下面是一个示例 Class User def self.current=(u)

我希望变量@user能够跨所有其他控制器访问。如何处理这个问题。

在每次调用操作之间,变量都会被销毁

每次都必须重新实例化
@user


为了使它干净,您可以在每次调用一个操作之前,在一个
过滤器中销毁变量

每次都必须重新实例化
@user


要使其干净,您可以在过滤器前的
中执行此操作,如果您想要当前用户(例如),您可以在模型中创建一个方法/函数并调用它。

如果您想要当前用户(例如),您可以在模型中创建一个方法/函数并调用它。

下面是一个示例

Class User

  def self.current=(u)
    @current_user = u
  end

  def self.current
    @current_user
  end

end
您必须在某个地方设置
User.current=
,例如在应用程序控制器中

然后,在另一个型号或控制器中,只需调用
用户即可

Class User

  def self.current=(u)
    @current_user = u
  end

  def self.current
    @current_user
  end

end
您必须在某个地方设置
User.current=
,例如在应用程序控制器中


然后在另一个型号或控制器中,只需调用
User.current

您可能希望在应用程序控制器中包含一个current\u User函数,例如:

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

现在,您可以从所有控制器和视图调用当前用户@Intrepidd的方法也很酷。

您可能希望在应用程序控制器中包含一个当前用户函数,例如:

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

现在,您可以从所有控制器和视图调用当前用户@无畏的方法也很酷。

如果我不这样做怎么办;没有可用的会话和登录?如果没有会话和登录,您在调用@user时希望获得什么?无一个空用户?当会话[:User\u id]不可用时,可以修改上述示例以返回User.new;没有可用的会话和登录?如果没有会话和登录,您在调用@user时希望获得什么?无一个空用户?当会话[:User\u id]不可用时,您可以修改上述示例以返回User.new。@Interpidd,有趣的是,设置实例变量可以从类方法中工作!。当您在用户类上调用User.current=时,当多个用户登录时,它会启用哪个用户实例?
User
class
的一个实例,
@current\u User
绑定到
User
类本身,而不是它的一个实例。因此,如果两个用户同时使用该应用程序,哪个用户将user.current返回@current\u user绑定到user classis如果您使用线程化Web服务器,此代码不安全,则应改为使用
Thread.current[:user]=u
。如果不使用线程化Web服务器,请求将堆叠,每个用户的值都将更改。@Interpidd,有趣的是,设置实例变量可以从类方法中工作!。当您在用户类上调用User.current=时,当多个用户登录时,它会启用哪个用户实例?
User
class
的一个实例,
@current\u User
绑定到
User
类本身,而不是它的一个实例。因此,如果两个用户同时使用该应用程序,哪个用户将user.current返回@current\u user绑定到user classis如果您使用线程化Web服务器,此代码不安全,则应改为使用
Thread.current[:user]=u
。如果不使用线程化Web服务器,则请求将堆叠,并且每个用户的值都将更改。