您的文件夹/文件结构应如下所示:
app/
models/
question/
document.rb
answer.rb
document.rb
question.rb
然后 rails 会自动找到正确的模型(它会将模型名称转换为文件名,并将命名空间转换为文件夹)。
确保在您question/document.rb
的类定义内部看起来像以下替代方案之一:
class Question::Document
end
或者
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
虽然plainrequire
可以工作,但最好使用require_dependency
它,因为它将与自动加载一起工作,这意味着:在开发过程中表现如预期。