說我有一些不屬於模型,控制器等的自定義類,我應該把它放在/ lib中是否正確?Rails加載路徑問題
In rails < 3我將這個目錄添加到我的加載路徑中,並在rails 3+中,我將它添加到我的autoload_path中。它是否正確?
現在說我有一些類已經擴展了已定義的類。我應該在哪裏把它放在啓動時運行。例如說我想在String上添加方法'foo'。
class String def foo 'foo; end end
我應該在哪裏放這個類,使其在啓動時定義?
我有另一個奇怪的錯誤是當我嘗試命名空間在lib中的類。
module MyProject class Foo end end
現在在一個控制檯:
ruby-1.9.2-p136 :004 > MyProject::Foo LoadError: Expected /Users/me/workspace/my_project/lib/foo.rb to define Foo from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:492:in `load_missing_constant' from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:183:in `block in const_missing'
我不斷收到此錯誤。我怎樣才能加載這個文件?
手袋實際上是一個錯字。仍然收到該錯誤。有沒有其他地方可以把我想要的自動加載文件像初始化程序?不知道爲什麼Rails3只在自定義的時候自動加載,如果這個常量沒有被定義 – HelpMe
除了autoload_paths,你還可以使用autoload_once_paths來定義在啓動Rails時只加載一次的目錄。確保在測試之間完全重新啓動控制檯或Rails應用程序 - 即使在開發中,即使在開發過程中,初始化程序和autoload_only_once路徑也只能加載一次。 –
令人困惑的事情是,「自動加載」不會真正自動加載任何東西。它只是添加到類路徑中。一切在配置/初始化器實際上自動加載..即在啓動時運行 – HelpMe