2012-06-15 52 views
1

我學習軌和我遇到一個小怪癖,我似乎無法找到答案的任何地方:Ruby on Rails的延遲更新

由於我學的軌道,我會在本地主機運行時(rails)對代碼進行一些調整,然後刷新瀏覽器以查看我想要做出的更改是否準確。這適用於更改視圖,CSS,HTML,路由等。

但是現在我正在調用另一個我寫的ruby類的控制器文件,並且當我對ruby類進行更改時,他們不馬上出現。我知道這一點,我在Ruby類中使用了各種printf函數來顯示事物的當前狀態,如果我添加一個並重新運行,它將不會顯示,除非我關閉服務器並重新啓動它。

有什麼想法?這是一個已知的問題?

回答

2

你必須自動加載包含自定義文件的文件夾:

# in config/application.rb: 

# Custom directories with classes and modules you want to be autoloadable. 
config.autoload_paths += %W(#{config.root}/extras) 

有你寫的,你要自動載入的文件夾。

警告:該命名是非常重要的:文件必須被命名爲他們定義的類/模塊(如模型,控制器等):

  • foo.rb必須定義富costant
  • foo/bar.rb必須定義Foo:Bar costant

並且您無法自動加載沒有此命名約定的文件。原因與自動加載工作有關:在你的代碼中調用f.e. Foo常量,並且缺少常量,Rails嘗試查看在其自動加載路徑中是否存在遵循此命名約定的文件,以及是否加載該文件。

+0

所以,我的外部Ruby代碼是一個名爲「car.rb」的文件,它的內部,我定義了一個名爲「汽車」類 - 我認爲需要遵循的命名約定。除了這個類以外,這個文件還包含了一個我寫給該類的方法的def。我正在變化是該方法的內部,但它們不註冊,即使我使用「config.autoload_paths + =%W(#{config.root} /應用/控制器)」 – startuprob

+0

該文件應不在控制器文件夾中,因爲Rails預計應用程序/控制器中的文件是控制器;我建議你做一個新的文件夾(我一般用的lib /#{} APP_NAME),移動車載類到這個新的文件夾 – mdesantis

+0

這是要健全的超級小白,但我不能讓它從LIB加載。我試圖只使用[require'car.rb'],我得到一個加載錯誤。我也嘗試了各種各樣的路徑,如lib/car.rb和lib/assets/car.rb,它們都不會加載。 – startuprob