Я новичок в рельсах и не могу понять эту проблему...
У меня есть контроллер
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 под капотом.