Структура вашей папки / файла должна выглядеть следующим образом:
app/
models/
question/
document.rb
answer.rb
document.rb
question.rb
И тогда rails автоматически найдет правильные модели (он переведет имя модели в имя файла, а пространства имен будут переведены в папки).
Убедитесь, что внутри вашего question/document.rb
определение класса выглядит как одна из следующих альтернатив:
class Question::Document
end
or
class Question
class Document
end
end
Если вы пишете просто class Document
, вы переопределяете константу верхнего уровня Document
.
Обратите внимание, что если глобальный Document
определен первым, это также вызовет эту ошибку. Это зависит от пути кода, поэтому лучший способ решить эту проблему - добавить require_dependency
там, где это необходимо. См. здесь и здесь для получения дополнительной информации.
Например. что-то вроде
require_dependency 'question/document'
class Answer < ActiveRecord::Base
end
Если вы поместите файл в другое место, где rails не смогут его найти автоматически, вам придется явно потребовать его, чтобы rails знал Question::Document
о существовании.
Если, например, вы определяете Question::Document
внутри модели Question
, что является разумным местом, вам нужно будет явно указать зависимость от модели Question
в вашей Answer
модели.
Итак, в таком случае в вашем answer.rb
вы напишете
require_dependency 'question'
class Answer < ActiveRecord::Base
# ..
end
Хотя обычный require
работает, вместо него предпочтительнее использовать require_dependency
, поскольку он будет работать с автоматической загрузкой, что означает: ведет себя так, как ожидалось, во время разработки.
person
nathanvda
schedule
11.09.2013
::Question::Document
- person apneadiving   schedule 29.08.2013