代码之家  ›  专栏  ›  技术社区  ›  Harish Shetty

访问ActiveRecord::Base中定义的常量

  •  1
  • Harish Shetty  · 技术社区  · 15 年前

    我正在尝试访问常量 VALID_FIND_OPTIONS 定义于 ActiveRecord::Base ( active_record/base.rb 2402号线轨道2.3.5)。

    ActiveRecord::Base::VALID_FIND_OPTIONS
    

    我得到了 NameError 例外。

    NameError: uninitialized constant ActiveRecord::Base::VALID_FIND_OPTIONS
    

    我以前使用类似的语法访问过其他库中的类常量。我不知道我哪里出错了。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Harish Shetty    13 年前

    常数 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
    
        2
  •  1
  •   kikito    15 年前

    试图获取的代码在哪里 ActiveRecord::Base::VALID_FIND_OPTIONS ?

    如果在加载ActiveRecord之前定义类,则常量将不可用。

    您可以通过要求加载ActiveRecord来强制加载它。在某些情况下,你需要使用红宝石才能使用 active_record .

    尝试同时要求他们:

    require 'rubygems'
    require 'active_record'
    
    # you should now be able to access ActiveRecord::Base::VALID_FIND_OPTIONS