ActiveRecord:在定义关联时,将class而不是字符串传递给class_name



在定义关联时,传递类而不是字符串是否有任何含义或问题?

belongs_to :owner, class_name: User

与相反

belongs_to :owner, class_name: "User"

该类可能尚未加载,在这种情况下,您将获得NameError: uninitialized constant User

出于这个原因,您应该使用"User",正如选项名称所暗示的那样::class_name,而不是:class

在极少数情况下,当使用类(User)而不是类名作为字符串('User')时,我会遇到一些随机错误。我无法复制它们,也无法通过重新启动应用服务器来解决这个问题。

它也可以是一个符号。它不能是类常量,因为如果有两个关联的模型,当第一个模型正在加载时,第二个模型尚未定义,因此不会定义常量,这将导致错误。

来源:https://github.com/rails/rails/issues/6486

最新更新