2010-03-08 57 views
1

我試圖訪問在ActiveRecord::Baseactive_record/base.rb行2402 Rails 2.3.5)中定義的常量VALID_FIND_OPTIONS在ActiveRecord :: Base中訪問常量定義

ActiveRecord::Base::VALID_FIND_OPTIONS 

我得到NameError例外。

NameError: uninitialized constant ActiveRecord::Base::VALID_FIND_OPTIONS 

我在之前使用過類似的語法訪問了其他庫中的類常量。我不知道我哪裏出錯了。

回答

2

恆定VALID_FIND_OPTIONS被匿名類的ActiveRecord::Base內部限定,因此它是不可訪問作爲ActiveRecord::Base::VALID_FIND_OPTIONS

module ActiveRecord 
    class Base 
    class << self 
     # the constant belongs to the scope of the anonymous class 
     VALID_FIND_OPTIONS = [..] 
    end 
    end 
end 

常數可使用以下語法來訪問:

ActiveRecord::Base.singleton_class::VALID_FIND_OPTIONS 
1

試圖獲得ActiveRecord::Base::VALID_FIND_OPTIONS的代碼在哪裏?

如果您在加載ActiveRecord之前定義一個類,那麼該常量將不可用。

您可以通過要求加載ActiveRecord來加載它。在某些情況下,在需要active_record之前,您將不得不要求rubygems。

嘗試要求它們兩者:

require 'rubygems' 
require 'active_record' 

# you should now be able to access ActiveRecord::Base::VALID_FIND_OPTIONS 
+0

我訪問不斷在我的控制器。當我從rails控制檯(默認情況下加載active_record)使用它時,我得到相同的錯誤。 – 2010-03-09 16:04:10