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