2009-05-24 11 views
10

Sono nuovo di rotaie e non riesco a capire questo problema ...Ruby on Rails modello all'interno dello spazio dei nomi non può essere trovato nel controllo

Ho un regolatore di

Admin::Blog::EntriesController 

definito in app/controllers/admin/blog/entries_controller.rb

E ho un modello chiamato

Blog::Entry 

defin Ed in app/modello/blog/entry.rb

Quando provo ad accedere al mio modello dal controller, ho un "uninitialized constant Admin::Blog::EntriesController::Blog" da questa linea:

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

Chiaramente non è trovare correttamente che lo spazio dei nomi è strano perché in base a ciò che ho letto, ho inserito il mio modello nella cartella corretta con la sintassi corretta.

Qualche idea su come posso risolvere questo problema?

Grazie

risposta

27

Prova:

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

E 'attualmente alla ricerca di classe sbagliata. L'utilizzo di :: prima dello Blog lo costringerà a guardare dal livello superiore.

+0

Ah, grazie, ha funzionato. Tuttavia, risulta che devo anche impostare un nome di tabella personalizzato per il mio modello. Inoltre, il form_per helper non funziona perché usa " _path" per l'attributo action che penso, quindi genera un errore che non riesce a trovare il metodo "blog_entries_path" ... Qualche idea? – nlaq

+0

Sto iniziando a pensare che i binari corrano su più domini per modelli e controller ... Il che è un peccato perché mi piace molto la struttura del percorso di /. – nlaq

+0

la convenzione di rotaie è che i nomi dei modelli sono singolari mentre i controllori sono plurali.Forse rinominare il controller Admins :: Blogs :: EntriesController (sì, sembra strano) Forse dovresti anche ripensare usando i modelli con namespace, sono probabilmente più problemi di quanti ne valga, vedi http://stackoverflow.com/questions/601768/namespaced-models-in-rails-whats-the-state-of-the-union – levinalex

1

è possibile ottenere un nome di tabella personalizzata utilizzando

set_table_name('foo') 

nella parte superiore del vostro modello.

Per quanto riguarda più spazi dei nomi, si potrebbe essere in grado di farla franca con l'utilizzo di

polymorphic_path(@the_object) 

per generare gli URL, come fa l'inferenza più di base (nella mia esperienza, almeno, forse form_for lo usa sotto il cofano) .

0

Sì, dall'esame del codice form_for utilizza polymorphic_path sotto il cofano.

3

Ora è 2011 e siamo nel territorio di Rails 3.1, ma questo problema si pone ancora. Mi sono imbattuto in esso con un controller con nomi diversi che faceva riferimento a un modello non assegnato a un nome, ma solo quando non c'erano righe per quel modello nel database!

Prefisso del nome del modello con :: Risolto il problema.

+0

Era in esecuzione con alcuni test in Rails 4. La creazione di un dispositivo yml vuoto per il modello lo aveva risolto, ma il problema era in realtà * avere uno spazio dei nomi con lo stesso nome di un modello *. – Sooie

Problemi correlati