1

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

@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

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

4

2 回答 2

2

我想 DaveNewton 说的是:

FEDEX ||= Pigeons::Fedex.new(
  ENV['FEDEX_KEY'],
  ENV['FEDEX_PASSWORD'],
  ENV['FEDEX_ACCOUNT'],
  ENV['FEDEX_METER']
)
于 2013-05-22T00:46:21.630 回答
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

正如其他评论/答案所示,这不是您希望在生产中使用的东西。

于 2013-05-22T01:24:34.040 回答