2009-05-24 3 views
10

で見つけることができない私は、レールに新たなんだと、この問題を把握することはできません...Rubyはコントローラ

私は、コントローラで定義された

Admin::Blog::EntriesController 

を持っていますアプリ/コントローラ/管理/ブログ/ entries_controller.rb

そして私は

Blog::Entry 

definと呼ばれるモデルを持っています私は、コントローラからの私のモデルにアクセスしようとすると、私はこの行から"uninitialized constant Admin::Blog::EntriesController::Blog"を取得するアプリ/モデル/ブログ/ entry.rb

に編:

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

明らかにそれが正しくどの名前空間を発見されていません私が読んだことによると、モデルを正しい構文で正しいフォルダに置いたからです。

私はこれをどのように修正することができますか?

おかげ

答えて

27

試してみてください。それは現在間違ったクラスを探している

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

::Blogの前に使用すると、強制的に最上位から表示されます。

+0

ああ、ありがとうございました。しかし、私のモデルにもカスタムテーブル名を設定する必要があることが判明しました。また、私は思うが、アクション属性のために " _path"を使用しているので、ヘルパーdosn'tは動作しないので、メソッド "blog_entries_path"を見つけることができないというエラーがスローされます。 – nlaq

+0

レールがモデルとコントローラ用の複数の名前空間にぶつかったと思っています...

//のパス構造が本当に好きなので残念です。 – nlaq

+0

レールは、コントローラーが複数の場合はモデル名が単数であるという規則があります。コントローラの名前を変更する可能性があります。Admins :: Blogs :: EntriesController(はい、これは奇妙に見えます) 名前空間のモデルを使用して再考する必要があります。おそらくもっと価値があります。http://stackoverflow.com/questions/601768/namespaced-models-in-rails-whats-of-the-union – levinalex

1

あなたは、モデルの上部に

set_table_name('foo') 

を使用して、カスタム・テーブル名を達成することができます。

複数の名前空間については、あなたはそれがより基本的な推論がそうであるように、あなたのURLを生成するために

polymorphic_path(@the_object) 

を使用して逃げることができるかもしれません(少なくとも私の経験では、多分のform_forは、ボンネットの下にそれを使用しています) 。

0

ええ、コードを見てみると、フードの下でpolymorphic_pathを使用します。

3

2011年ですが、私たちはRails 3.1の領域ですが、まだこの問題が発生しています。私はちょうど名前空間のないモデル、を参照している名前空間コントローラーでそれを実行しましたが、そのモデルの行がデータベースになかったときだけでした!

モデル名の前に::を付けて問題を解決します。

+0

Rails 4でいくつかのテストを実行していました。モデルの空のymlフィクスチャを作成して修正しましたが、根本的な問題は実際には*モデルと同じ名前の名前空間を持つ*。 – Sooie

関連する問題