[英]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.