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がイニシャライザーを実行するためです。Railsがクラスをセットアップする前にいくつかのイニシャライザーを実行する方法はありますか?


最後に、この問題は、 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 に答える