4

基本上我有一个让一切initializer classRAILS_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 在创建类之后运行 Initializers。在 Rails 设置它的类之前,有什么方法可以让一些 Initializers 运行?


最后,这个问题通过在 Rails 加载模型之前添加require "#{Rails.root}\conf\initializers\app_constant.rb"到加载来解决。application.rb

4

2 回答 2

4

要在 Rails 本身加载之前运行代码,请将其require 'rails/all'放在config/application.rb.

于 2012-05-21T10:42:36.293 回答
1

另一种解决方案是将常量包装在一个方法中,以便在加载类时不对其进行评估,而仅在稍后调用该方法时对其进行评估:

def self.site
  AppConstant::APIURL
end

如果它也需要可设置:

def self.site=(url)
  @site = url
end

def self.site
  @site ||= AppConstant::APIURL
end
于 2013-09-23T12:41:02.763 回答