Модель Ruby on Rails внутри пространства имен не найдена в контроллере - PullRequest
11 голосов
/ 24 мая 2009

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

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

Admin::Blog::EntriesController

определено в app / controllers / admin / blog / records_controller.rb

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

Blog::Entry

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

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

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

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

Есть идеи, как мне это исправить?

Спасибо

Ответы [ 4 ]

30 голосов
/ 24 мая 2009

Попробуйте:

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

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

3 голосов
/ 27 сентября 2011

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

1 голос
/ 24 мая 2009

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

set_table_name('foo')

вверху вашей модели.

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

polymorphic_path(@the_object)

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

0 голосов
/ 19 января 2010

Да, от просмотра кода form_for используется polymorphic_path под капотом.

...