Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何存储值以使其';在Ruby on Rails中,在整个请求中共享什么?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何存储值以使其';在Ruby on Rails中,在整个请求中共享什么?

Ruby on rails 如何存储值以使其';在Ruby on Rails中,在整个请求中共享什么?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何存储一个值以便在整个请求中共享(即,使其在控制器、视图和模型中可访问) Put是一个全局变量 创建一个单例并将其存储在类变量中 将其存储在本地线程中 您可能可以像这样在会话中存储值会话[:foo]=@foo,并且您应该能够根据需要获取此值在控制器中初始化的任何实例变量#action都将在视图中可用。要在模型中使用这些变量,可以将它们作为参数传递给model方法。可以在初始值设定项中创建自定义配置变量, 在配置/初始值设定项中创建一个文件,比如说global_var.rb 在这个文件中声明任何

如何存储一个值以便在整个请求中共享(即,使其在控制器、视图和模型中可访问)

  • Put是一个全局变量
  • 创建一个单例并将其存储在类变量中
  • 将其存储在本地线程中

  • 您可能可以像这样在会话中存储值
    会话[:foo]=@foo
    ,并且您应该能够根据需要获取此值在
    控制器中初始化的任何实例变量#action
    都将在视图中可用。要在模型中使用这些变量,可以将它们作为参数传递给model方法。

    可以在初始值设定项中创建自定义配置变量, 在配置/初始值设定项中创建一个文件,比如说
    global_var.rb

    在这个文件中声明任何变量并给它赋值,比如

    custom_var=“你好,世界!”

    现在要使用它,你必须这样做

    Rails.configuration.custom_var=custom_var,因此您的全局_var.rb应该包括

    custom_var = "Hello World!"
    Rails.configuration.custom_var = custom_var
    
    现在您有了
    Rails.configuration.custom_var
    ,它将输出
    Hello World
    ,您可以在任何地方使用它


    但无论何时启动应用程序/rails服务器,它都会被初始化。

    我认为拥有此功能的唯一方法是使用会话(或类似会话的)存储机制

    拥有会话存储将使您的数据在所有控制器和视图中可用,并且您可以将数据作为参数传递给模型

    如果您不想在会话中包含此类数据,可以在会话中存储哈希uid,并在其他存储(如redis)中进行查找。例如:

    这将给你:

    • 灵活性(您可以向用户或任何标识符添加额外数据)
    • 安全性(您的数据仅在您的系统上,通过哈希id,不同的会话无法访问彼此的数据)
    • 性能(因为redis的性能类似于memcache)

    启动时设置的变量,其值不应更改。所有用户和所有线程共享且相同:使用常量

    在运行时设置的变量,其值可以更改。所有用户和所有线程的共享和相同:使用类实例变量


    变量“private”用于用户和线程,但可跨所有rails组件访问:使用线程变量。

    全局变量应该可以工作(根据定义,呵呵)。虽然这不是我要走的路线。你的用例是什么?变量是否随每个请求而变化?@SergioTulentsev那么您的首选路线是什么?@scaryguy:取决于具体的场景。
    会话在模型中不可用。我在给定的选择范围内询问。这是一个客观类型的问题。如果这真的是一个请求,请这样做。如果它与“会话”更相关,那么就执行下面的@xlembouras解决方案来实现缓存/持久化。请不要试图在请求之间保留变量,因为这将导致痛苦和痛苦。
    
    uid = session[:uid]
    data_1 = Redis.handler_get_data_1_by_id(uid)