2009-05-24 9 views
10

Jestem nowy na szynach i nie można dowiedzieć się tego problemu ...Ruby on Rails modelu wewnątrz przestrzeni nazw nie można znaleźć w sterowniku

Mam kontroler

Admin::Blog::EntriesController 

zdefiniowanego w app/controllers/admin/blog/entries_controller.rb

i mam model o nazwie

Blog::Entry 

defin ed w app/model/blog/entry.rb

Kiedy próbuję uzyskać dostęp do mojego modelu ze sterownika, dostaję "uninitialized constant Admin::Blog::EntriesController::Blog" z tej linii:

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

Oczywiście to nie jest znalezienie nazw, które poprawnie jest dziwne, ponieważ zgodnie z tym, co przeczytałem, umieściłem mój model we właściwym folderze z poprawną składnią.

Jakieś pomysły na to, jak mogę to naprawić?

Dzięki

Odpowiedz

27

Spróbuj:

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

To poszukujemy złej klasy. Używanie :: przed Blog zmusi go do patrzenia z poziomu najwyższego poziomu.

+0

Ah, dzięki, to zadziałało. Okazuje się jednak, że muszę ustawić niestandardową nazwę tabeli dla mojego modelu. Ponadto, form_for pomocnika nie działa, ponieważ używa " _path" dla atrybutu akcji, myślę, więc rzuca błąd, że nie może znaleźć metody "blog_entries_path" ... Jakieś pomysły? – nlaq

+0

Zaczynam myśleć, że szyny marszczą brwi na wiele przestrzeni nazw dla modeli i kontrolerów ... To wstyd, ponieważ bardzo podoba mi się struktura ścieżki. – nlaq

+0

konwencja szyn jest taka, że ​​nazwy modeli są pojedyncze, podczas gdy kontrolery są w liczbie mnogiej.Może zmienić nazwę kontrolera Administratorzy :: Blogi :: EntriesController (tak, to wygląda dziwnie) Może powinieneś również przemyśleć użycie modeli z nazwami, prawdopodobnie są one bardziej kłopotliwe niż są warte, zobacz http://stackoverflow.com/questions/601768/namespaced-models-in-rails-whats-the-the-the-union – levinalex

1

Można osiągnąć niestandardową nazwę tabeli za pomocą

set_table_name('foo') 

w górnej części modelu.

Jak dla wielu nazw, może być w stanie uciec z użyciem

polymorphic_path(@the_object) 

do generowania adresów URL, jak to robi bardziej podstawowe wnioskowanie (w moim doświadczeniu przynajmniej, może form_for używa go pod maską) .

0

Tak, patrząc na kod form_for używa ścieżki polimorficznej pod maską.

3

To jest 2011 rok i jesteśmy na terytorium Rails 3.1, ale ten problem wciąż się pojawia. Właśnie natknąłem się na to z kontrolerem z nazwami, odwołującym się do modelu bez nazwy, , ale tylko wtedy, gdy w bazie danych nie było żadnych wierszy dla tego modelu!

Przedrostek nazwy modelu z :: rozwiązuje problem.

+0

Zrobiłem to z niektórymi testami w Railsach 4. Stworzenie pustego urządzenia yml dla modelu naprawiło to, ale podstawowym problemem było faktycznie * posiadające przestrzeń nazw taką samą jak model *. – Sooie

Powiązane problemy