Rails:在创建类之前运行初始化程序

时间:2012-05-21 10:35:34

标签: ruby-on-rails ruby-on-rails-3 activeresource initializer

基本上我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来解决此问题。

2 个答案:

答案 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