【问题标题】:How to use global instances in rails?如何在 Rails 中使用全局实例?
【发布时间】:2013-03-25 19:09:36
【问题描述】:

我在初始化器中有以下内容:

options = YAML.load_file(Rails.root.join('config','oauth.yml' ))

CLIENT = GameSystem::Client.new options

如何利用 CLIENT 从控制器调用其相关方法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 ruby-on-rails-3.2


    【解决方案1】:

    我做:

    class ApplicationController
    
      private
    
      def game_client
        @game_client ||= begin
          options = YAML.load_file(Rails.root.join('config','oauth.yml' ))
          GameSystem::Client.new options
        end
      end
    

    然后在需要的地方调用它:

    game_client #like you're using current_user
    

    所以基本上,我不会在初始化程序中创建它(除非有我无法实现的需要)。

    【讨论】:

    • 这将在每个请求期间加载配置文件,如果文件从不更改,这可能是不必要的。
    • 是的......那么我将如何在初始化程序中使用它,以便它可用于整个 Rails 应用程序
    • 实际上这句话听起来很奇怪:current_user 不适用于整个网络应用程序,它很好,你为什么需要这个?
    • 如果我没记错的话,您需要将该状态存储在控制器中创建的对象之外的某个位置;相反,它或包含它的对象最终将存储在某处的静态变量中。所以我们告诉消费者在 Rails 初始化程序中创建一个客户端实例并将其存储在一个静态变量中。
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多