2014-09-11 75 views
0

我在libs目錄中有一個目錄結構後,仍然無法識別:類增加了負載路徑

docx 
    parser.rb 

它的一些內容:

module Docx 
    class Parser 
    end 
end 

我想將它添加到加載路徑,以便當我運行rails控制檯時,它被加載:

config.autoload_paths << Rails.root.join('lib') 

不幸的是,即使在我運行rails控制檯,我得到這個錯誤:

> Docx 
NameError: uninitialized constant Docx 

儘管庫是在負載路徑:

2.1.2 :005 > ActiveSupport::Dependencies.autoload_paths 
=> [#<Pathname:/Users/myuser/projects/docx_rails/lib>... 

爲什麼會出現這種情況?

回答

0

您是否遵循了正確的命名約定?

在配置/ application.rb中:

config.autoload_paths << Rails.root.join('lib') 

然後保持正確的LIB命名約定。

在LIB/moo.rb:

class Moo 
end 
中的lib/MOO/car.rb

class Moo::Car 
end 
+0

不,我沒有遵循該命名約定。在我的情況下,Moo是一個模塊,而不是一個類。這很重要嗎? – Donato 2014-09-11 05:22:48

+0

我的猜想是沒關係,但你必須嘗試確定。 – Nona 2014-09-11 16:52:28

-1

在Rails的延遲加載的工作 - 就像許多其他的功能 - 只要你尊重「標準或定製」的理念。

在這種情況下,要加載Docx模塊,您需要重命名該文件以使其被稱爲docx.rb.

雖然,它看起來像我正在嘗試使用導軌控制檯創建一個gem。

我建議使用irb控制檯(rails會加載許多庫,您需要在庫中明確要求 - 事實上,如果您使用rails控制檯,您將永遠不會注意到這一點)。

無論何時進行代碼更改,都可以使用load方法重新加載代碼(與require不同,load強制代碼再次加載)。

load 'docx.rb'