2

기본적으로 모든 것을 쉽게 제어 할 수 있도록 initializer classRAILS_ROOT/config/initialiers/app_constant.rb입니다.레일즈 : 클래스를 만들기 전에 이니셜 라이저를 실행하십시오.

class User < ActiveResource::Base 
    self.site = AppConstant::APIURL 
end 

그리고 rails s을 실행할 때, 내가 레일 실행하기 때문에 문제가 있음을 알고

<class:User>: uninitialized constant User::AppConstant::APIURL 

다음과 같은 오류가 발생했습니다 :

class AppConstant 
    APIURL = 'http://path.to.api' 
end 

그리고 RAILS_ROOT/model/user.rb에서

, 나는 설정이 클래스를 만든 후의 초기화 프로그램. Rails가 클래스를 설정하기 전에 초기화 프로그램을 실행하는 방법이 있습니까?


마지막으로이 문제는 바로 레일로드 모델 이전에로드 된 application.rbrequire "#{Rails.root}\conf\initializers\app_constant.rb"을 추가하여 해결된다.

답변

3

레일 자체가로드되기 전에 코드를 실행하려면 require 'rails/all' 위의 코드를 config/application.rb에 넣으십시오.

+0

답변 해 주셔서 감사합니다. 전역 범위'::'로 시도했지만 작동하지 않습니다. 문제는 레일스가'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