2012-06-27 100 views
1

我正在構建一個Rails應用程序,其中包含Developer s,其中有Application s。開發人員和應用程序都是其內容來自外部API的對象。因此,這些模型都是手寫的,並沒有利用ActiveModel,ActiveResource等。Rails模型與其他模型作爲實例變量

我想確定如何實例化Application對象作爲Developer對象的實例變量。

我有我的Developer.initialize()函數中下面的代碼:

@apps = Array.new 
data['applications'].each do |app| 
    @apps << Application.new(app) 
end 

代碼是相當自我解釋。 developer.rb(這是開發人員定義的地方)和application.rb(這是應用程序定義的地方)位於app/models目錄中。我的開發人員控制器通過調用Developer.new來實例化一個開發人員對象。

do代碼塊內的行產生以下錯誤:

uninitialized constant Developer::Application 
app/models/developer.rb:24:in `initialize' 
app/controllers/developers_controller.rb:11:in `new' 
app/controllers/developers_controller.rb:11:in `show' 

所以看起來Rails正在試圖實例化一個開發者::應用,而我想要實例在application.rb定義的應用程序對象在app/models目錄中。有沒有辦法做到這一點?

+0

你的代碼不是很Ruby風格;第一部分可能是:'@apps = data ['applications']。map {| app | Application.new(app)}'。 – meagar

+0

不錯!感謝您指出了這一點。我正在學習Ruby和Rails(我最喜歡C/C++),所以我並不總是處在用Ruby編寫事物的最有效方式之上。無論哪種方式,對Application.new(應用程序)的調用給了我這個錯誤,但。 – finiteloop

+0

'Application'可能是Rails中的一個保留名稱空間 - 如果您將其他名稱命名爲模型,問題是否會消失? – MrTheWalrus

回答

1

你必須要求必要的文件。在我的情況下,從Developer類中,我需要以下行:require 'application.rb',一切工作正常。