2009-05-24 97 views
10

我新的軌道,不能弄清楚這個問題可以找到...Ruby on Rails的內部命名空間模型無法控制

我有一個控制器

Admin::Blog::EntriesController 

定義應用程序/控制器/管理/博客/ entries_controller.rb

我呼籲

Blog::Entry 

defin模型ED在app /模型/博客/ entry.rb

當我嘗試從控制器訪問我的模型,我從該行獲得"uninitialized constant Admin::Blog::EntriesController::Blog"

@blog_entries = Blog::Entry.find(:all) 

顯然,這是不正確,其發現的命名空間很奇怪,因爲根據我讀過的內容,我將模型放在正確的語法文件夾中。

我如何能解決這個問題的任何想法?

感謝

回答

27

嘗試:

@blog_entries = ::Blog::Entry.find(:all) 

它目前正在尋找錯誤的類。 Blog之前使用::將強制它從頂層看。

+0

啊,謝謝,這確實奏效。但是,事實證明,我必須爲我的模型設置一個自定義表名。此外,form_for幫助者dosn't工作,因爲它使用「 _path」的事情我認爲的行動屬性,所以它會拋出一個錯誤,它無法找到方法「blog_entries_path」...任何想法? – nlaq 2009-05-24 08:28:57

+0

我開始認爲Rails在模型和控制器的多個命名空間中會皺眉頭......這是一種遺憾,因爲我非常喜歡

//路徑結構。 – nlaq 2009-05-24 08:30:11

1

您可以通過使用

set_table_name('foo') 

在模型的頂部實現自定義表名。

至於多個命名空間,你也許可以用

polymorphic_path(@the_object) 

生成網址因爲它更基本的推論就完事了(至少在我的經驗,也許的form_for使用它的引擎蓋下) 。

0

是的,從查看代碼form_for使用下方的polymorphic_path。

3

現在是2011年,我們在Rails 3.1領域,但這個問題仍然存在。我只是碰到一個名稱空間控制器引用非名稱空間模型,,但只有當數據庫中沒有該模型的行時!

使用::前綴固定模型名稱解決了問題。