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

时间:2010-11-22 15:02:04

标签: ruby-on-rails plugins

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

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

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

创建此架构的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

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

如果您提供有关您想要做的事情的更多详细信息(即您想要访问@account的地点/方式),那么有人可能会建议一个好方法。

答案 1 :(得分:0)

也许这样的事情会起作用:

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 %>