2010-11-09 57 views
0

所以我的問題是,我有兩個同名的類。如何區分類「ClassA」和「Module :: ClassA」?

一個是REXML :: Document,它是第三方庫。

另一個是我的應用程序控制的名爲「Document」的ActiveRecord模型。

在我的控制器中,當我做「Document.transaction」時,他告訴我方法「事務」對類「REXML :: Document」不存在,但我真正想要的是使用我的模型。我的模型不屬於一個模塊,所以我怎麼能告訴紅寶石,他應該看看模型「文檔」而不是「REXML :: Document」?

+0

我曾問過類似的問題,看看是否有幫助:http://stackoverflow.com/questions/1270227/what-is-the-fully-qualified-name-of-a-model-in-ruby-on -rails – Swanand 2010-11-09 12:37:31

回答

1

::Document告訴紅寶石開始在頂層的名稱查找,而不是目前的水平。

它與Unix路徑名類似,其中/也用作路徑名組件分隔符和作爲不使用相對查找的標誌。

但是,如果您在控制器內部,Document本身應該是從來沒有請參閱REXML::Document。它應該總是只查找Document,首先在當前命名空間,然後上一級,等等,直到頂級命名空間(實際上沒什麼特別的,它只是Object類)。

除非你的代碼在某個地方有include REXML,在這種情況下,有一個比使用::Document更簡單的補救措施:不要那麼做。

+0

你是對的,它應該先查找Document,然後才能查找REXML :: Document。我發現了這個問題。我們有一個幫助程序,在任何類或模塊之外的文件主體中包含「REXML」模塊,我相信這使得它可用於rails應用程序中的任何文件。 我相信我可以通過將include移到需要它的模塊中來解決這個問題。但是,僅供將來參考,在這種情況下您談論的更簡單的補救措施是什麼?如果我的控制器包含REXML會怎麼樣?我如何通過REXML :: Document引用Document? – 2010-11-09 13:50:02

0

是的,我認爲這個問題有很多重複。 答案是,在任何情況下,使用::Document雖然我還以爲只是打字Document寧願DocumentREXML::Document

+0

我環顧四周,發現沒有答案。搜索這個主題是非常棘手的,它非常具體。出於某種原因,該應用程序偏愛「文檔」上的「REXML :: Document」。我發現了原因。但是做「:: Document」並沒有解決它。 – 2010-11-09 13:53:18

相關問題