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

在定义关联时,是否存在传递类而不是字符串的含义或陷阱?

belongs_to :owner, class_name: User 

相反:

 belongs_to :owner, class_name: "User" 

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

因为这个原因,您应该使用"User" ,如选项名称:class_name ,not :class所暗示的那样。

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

它也可以是一个象征。 它不能是类常量,因为如果你有两个相关的模型,当第一个被加载时,第二个尚未定义,所以不会定义常量,这会产生错误。

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