代码之家  ›  专栏  ›  技术社区  ›  Neil Middleton

从Rails插件访问应用程序变量

  •  1
  • Neil Middleton  · 技术社区  · 15 年前

    我有一个在整个应用程序中全局可用的变量(所以我在applicationcontroller中设置了@account)。

    但是,我有一个插件需要访问同一个变量。

    注意:这个变量在每个请求上都是不同的。

    创建这个体系结构的最佳方法是什么?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Arsen7    15 年前

    也许这样的方法会奏效:

    class Account
      def self.current
        @current
        # or: Thread.current[:current_account]
      end
      def self.current=(a)
        @current = a
        # or: Thread.current[:current_account] = a # ..if you want to be thread-safe.
      end
      ...
    end
    
    # your controller's before_filter:
    def assign_account
      ...
      Account.current = @account # But remember to set nil if none found!
    end
    
    # Any code in your app (view, model, almost anything):
    <%= Account.current.name if Account.current %>
    
        2
  •  0
  •   Max Williams    15 年前

    在应用程序控制器中设置@account并不能使其在整个应用程序中全局可用-例如,模型无法访问它。控制器中设置的任何实例变量都只能在控制器或视图中使用。如果插件具有控制器和视图代码,那么只要在插件控制器代码运行之前设置了变量,该代码就应该能够以正常方式访问变量。

    如果你提供了更多关于你想做什么的细节(比如你想在哪里/如何访问@account),那么有人可能会提出一个好的方法。