Rails:在创建类之前运行初始化程序
基本上我在RAILS_ROOT/config/initialiers/app_constant.rb
上有一个initializer class
,使一切都易于控制。
class AppConstant APIURL = 'http://path.to.api' end
在RAILS_ROOT/model/user.rb
,我有以下设置:
class User < ActiveResource::Base self.site = AppConstant::APIURL end
当运行rails s
,我收到以下错误
: uninitialized constant User::AppConstant::APIURL
我知道问题是因为Rails在创建Classes后运行Initializers。 有没有办法让一些初始化程序在Rails设置它之前运行?
最后,通过将require "#{Rails.root}\conf\initializers\app_constant.rb"
到在Rails加载模型之前加载的application.rb
来解决此问题。
要在Rails本身加载之前运行代码,请将它放在config/application.rb
require 'rails/all'
上方。
另一种解决方案是将常量包装在一个方法中,以便在加载类时不进行求值,但仅在调用该方法时才进行求值:
def self.site AppConstant::APIURL end
如果它也需要设置:
def self.site=(url) @site = url end def self.site @site ||= AppConstant::APIURL end