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