简体   繁体   English

从任何控制器调用这些?

[英]Call these from any controller?

I have the following in an initializer: 我在初始化器中具有以下内容:

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

I basically want to be able to call @fedex.track from any controller. 我基本上希望能够从任何控制器调用@fedex.track

But right now when I try to call @fedex.track I get NoMethodError: undefined method 'track' for nil:NilClass 但是现在当我尝试调用@fedex.track我得到了NoMethodError: undefined method 'track' for nil:NilClass

So, what am I doing wrong to be able to make that work? 那么,我做错了什么才能进行这项工作?

I suppose what DaveNewton is saying is: 我想DaveNewton在说什么:

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

If you really wanted to do what you asked, you could setup a before filter: 如果您确实想按照自己的意愿去做,可以设置一个前置过滤器:

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

This isn't something you would want to use in production as the other comments/answers show. 正如其他评论/答案所示,这不是您要在生产中使用的东西。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM