Ruby on rails 用户登录后的Rails全局变量

Ruby on rails 用户登录后的Rails全局变量,ruby-on-rails,global-variables,Ruby On Rails,Global Variables,我想设置一个全局变量,可以在任何控制器/视图中使用。这个变量使用存储在数据库中的一些特定于用户的数据,所以在了解用户之前我无法访问它们。只有在用户登录过程后,我才需要初始化此变量 换句话说,在我的数据库中,我为每个用户存储一个特定的唯一ID,当用户登录时,我需要检索这个ID并使用它来创建我的变量 我怎样才能做到这一点?我尝试了多种解决方案/旁路,但没有成功。您需要使用Ruby on Rails中的cookie存储或会话。您可以在控制器中设置这些参数,然后它们就可以在全局范围内使用 cookie存

我想设置一个全局变量,可以在任何控制器/视图中使用。这个变量使用存储在数据库中的一些特定于用户的数据,所以在了解用户之前我无法访问它们。只有在用户登录过程后,我才需要初始化此变量

换句话说,在我的数据库中,我为每个用户存储一个特定的唯一ID,当用户登录时,我需要检索这个ID并使用它来创建我的变量


我怎样才能做到这一点?我尝试了多种解决方案/旁路,但没有成功。

您需要使用Ruby on Rails中的cookie存储或会话。您可以在控制器中设置这些参数,然后它们就可以在全局范围内使用

cookie存储在您的客户端浏览器中,在浏览器关闭且您与客户端的连接断开后,cookie始终可用。这对于在登录之间不需要的持久数据非常有用,但可能会带来安全风险,因为客户端和任何有权访问其计算机的人都可以读取cookie值

另一方面,会话设置为浏览器在站点上打开的当前时间。浏览器关闭时,会话数据将随之删除

因此,为了存储您的ID或您需要的任何内容,您可以将其放入会话中,从该点开始,直到浏览器关闭,每个控制器都可以访问该会话。或者,您可以将其放入cookie中,只要用户在会话中未清除cookie或您自己删除cookie,您就可以访问它

我建议召开敏感数据会议。您可以在每次登录用户时进行设置,以使其符合您的需要

session[:user_id] = "whatever you want"
会话散列可以在您网站的任何控制器中使用,因此通过设置一个新密钥(如:user_id),它将立即将其添加到会话中。因此,您可以在任何需要的地方创建所需的内容。然后要再次访问它,只需拉取值

user_id = session[:user_id]

这个问题似乎有点不清楚,但我建议您在您的用户模型上定义一个方法,为每个用户获取所需的任何内容。然后,您可以使用current_user helper(我猜您正在使用Desive)为您的当前用户调用该方法。

我将在应用程序控制器中使用before_操作,并附带检查用户是否已登录的条件。你在用Desive吗?那就是:

class ApplicationController < ActionController::Base
   before_action :set_my_variable

   private

   def set_my_variable
       @my_variable = current_user.my_variable if user_signed_in?
   end
class ApplicationController
基本上与会话相同,但我认为更安全。很好的建议。是的,我正在使用Deviate。那么我的代码应该可以正常工作(显然,假设您将“my_variable”更改为正确的名称)。@RichardAE是的,我刚刚尝试了它,它工作得非常好。我尝试了其他100倍更复杂的解决方案…-\u-这一个非常容易理解和设置。谢谢!