2

基本上我有一個initializer classRAILS_ROOT/config/initialiers/app_constant.rb使一切都易於控制。Rails:在創建類之前運行初始化程序

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運行在創建類之後的初始化器。在Rails設置類之前,有什麼辦法讓一些初始化器運行嗎?


最後這個問題是通過添加require "#{Rails.root}\conf\initializers\app_constant.rb"到之前右側滑軌負荷模型加載application.rb解決。

回答

3

要在Rails本身加載之前運行代碼,請將其放在require 'rails/all'以上config/application.rb

+0

感謝您的回答,我嘗試過使用全局範圍'::'但它不起作用。問題是,當Rails生成類「User」時,類「AppConstant」未初始化。但我不知道如何讓類'AppConstant'在讀取'User'類之前得到初始化。 – jwall

+0

更新了我的回答 – DanS

+0

你說得對,最後我必須這樣來解決問題。 – jwall

0

另一解決方案是包裹恆定的方法中,因此不計算在類被裝載,但只有後,當該方法被稱爲:

def self.site 
    AppConstant::APIURL 
end 

如果它需要是可設置的,以及:

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

def self.site 
    @site ||= AppConstant::APIURL 
end 
相關問題