gpt4 book ai didi

ruby-on-rails - 警告 : toplevel constant referenced

转载 作者:数据小太阳 更新时间:2023-10-29 06:22:56 26 4
gpt4 key购买 nike

我有四个模型(DocumentQuestionQuestion::DocumentAnswer)。在我的 Answer 模型中有

validates :text,
presence: { :unless => Proc.new{ |a| a.question.is_a? Question::Document } }

这给了我警告

警告:Question::Document 引用的顶层常量文档

如何防止出现此警告(不重命名我的类)?

最佳答案

您的文件夹/文件结构应如下所示:

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在需要的地方。参见 herehere了解更多背景。

例如类似

require_dependency 'question/document' 

class Answer < ActiveRecord::Base

end

如果你把文件放在不同的地方,rails 不能自动找到它,你必须明确要求它,所以 rails 知道 Question::Document存在。

例如,如果您定义 Question::DocumentQuestion里面模型,这是一个合理的地方,您必须明确声明对 Question 的依赖性在你的模型 Answer模型。

所以,在这种情况下,在您的 answer.rb 中你会写

require_dependency 'question'

class Answer < ActiveRecord::Base
# ..
end

While plain require works, it is preferred to use require_dependency instead as it will work with auto-loading, which means: behaves as expected during development.

关于ruby-on-rails - 警告 : toplevel constant referenced,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com