从任何控制器调用这些?

时间:2013-05-22 00:22:34

标签: ruby-on-rails variables methods

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

@fedex ||= Pigeons::Fedex.new(
  ENV['FEDEX_KEY'],
  ENV['FEDEX_PASSWORD'],
  ENV['FEDEX_ACCOUNT'],
  ENV['FEDEX_METER']
)

我基本上希望能够从任何控制器调用@fedex.track

但是现在当我尝试拨打@fedex.track时,我得到NoMethodError: undefined method 'track' for nil:NilClass

那么,能够做到这一点我做错了什么?

2 个答案:

答案 0 :(得分:2)

我想DaveNewton所说的是:

FEDEX ||= Pigeons::Fedex.new(
  ENV['FEDEX_KEY'],
  ENV['FEDEX_PASSWORD'],
  ENV['FEDEX_ACCOUNT'],
  ENV['FEDEX_METER']
)

答案 1 :(得分:0)

如果你真的想做你要求的事情,你可以设置一个前过滤器:

class ApplicationController < ActionController::Base
   before_filter :copy_instance_variables_from_initializers

private

  def copy_instance_variables_from_initializers
    TOPLEVEL_BINDING.eval("instance_variables").each |ivar|
      instance_variable_set(ivar.to_s, TOPLEVEL_BINDING.eval(ivar.to_s))
  end

end

这不是你想要在制作中使用的东西,正如其他评论/答案所示。