Модель Ruby on Rails внутри пространства имен не может быть найдена в контроллере

Я новичок в рельсах и не могу понять эту проблему...

У меня есть контроллер

Admin::Blog::EntriesController

определяется в приложении/контроллерах/admin/blog/entries_controller.rb

И у меня есть модель под названием

Blog::Entry

определенный в app/model/blog/entry.rb

Когда я пытаюсь получить доступ к моей модели с контроллера, я получаю "uninitialized constant Admin::Blog::EntriesController::Blog" из этой строки:

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

Очевидно, что это неправильное определение пространства имен, которое является нечетным, потому что в соответствии с тем, что я прочитал, я поместил свою модель в правильную папку с правильным синтаксисом.

Любые идеи о том, как я могу это исправить?

Спасибо

Ответ 1

Try:

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

В настоящее время он ищет неправильный класс. Использование :: до Blog заставит его смотреть с верхнего уровня.

Ответ 2

Сейчас 2011 год, и мы находимся на территории Rails 3.1, но эта проблема все еще возникает. Я просто столкнулся с ним с контроллером с именами, ссылающимся на модель, отличную от имен, но только тогда, когда в этой базе не было строк для этой модели!

Префикс имени модели с помощью:: исправляет проблему.

Ответ 3

Вы можете создать собственное имя таблицы, используя

set_table_name('foo')

в верхней части вашей модели.

Как и для нескольких пространств имен, вы можете избежать использования

polymorphic_path(@the_object)

чтобы генерировать ваши URL-адреса, поскольку это делает более основополагающий вывод (по моему опыту, по крайней мере, может быть, form_for использует его под капотом).

Ответ 4

Да, от взгляда на код form_for использует polyorphic_path под капотом.