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