代码之家  ›  专栏  ›  技术社区  ›  daniel

Rails 3自动加载

  •  15
  • daniel  · 技术社区  · 15 年前

    class ConstData
    
      US_CITIES = ['miami', 'new york']
    
      EUROPERN_CITIES = ['madrid', 'london']
    
    end
    

    它存储在/lib/const_data.rb下

    其思想是,在模型、控制器或视图中,我可以:

    ConstData::US_CITIES

    Rails应该会自动加载这个类,我从: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl=en

    但是这不起作用。有人能给我解释一下怎么做吗?

    4 回复  |  直到 15 年前
        1
  •  48
  •   Jared Beck    12 年前

    “丹尼尔”指的是2008年的帖子。从那以后铁轨就变了。

    不过,你可以很容易地重新激活它。正常开放 config/application.rb 并在配置中添加 Application

    config.autoload_paths += %W(#{config.root}/lib)
    

    然后将自动加载lib/dir。

        2
  •  13
  •   Steven Bristol    13 年前

    自动加载路径对您不起作用并且您被迫执行以下操作的原因:

    Dir["lib/**/*.rb"].each do |path|
      require_dependency path
    end
    

    是因为 你忘了给你的类命名

    lib/awesome/stuffs.rb应该包含这样一个类/模块:

    class/module Awesome::Stuffs
    ....
    

    但你有:

    class/module Stuffs
    ....
    

    :)

        3
  •  2
  •   Benoit Garret    14 年前

    config.autoload_paths 不适合我。我把下面的问题解决了 ApplicationController :

    Dir["lib/**/*.rb"].each do |path|
      require_dependency path
    end
    
        4
  •  1
  •   Victor Lellis    12 年前

    遵循lib dir被自动加载的解决方案:

    删除 config.threadsafe! 生产.rb ;

    加载项 config/application.rb

    config.autoload_paths += %W(#{config.root}/lib)
    config.threadsafe!
    config.dependency_loading = true