【问题标题】:ActiveRecord: Pass class instead of string to class_name when defining associationsActiveRecord:在定义关联时将类而不是字符串传递给 class_name
【发布时间】:2016-06-04 02:09:28
【问题描述】:

在定义关联时传入类而不是字符串是否有任何含义或陷阱?

belongs_to :owner, class_name: User

相对于:

belongs_to :owner, class_name: "User"

【问题讨论】:

    标签: ruby-on-rails activerecord associations


    【解决方案1】:

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

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

    【讨论】:

    • 或符号:user。添加完整性。
    • @Josh,不应该是:User 大写u吗?
    • @meagar 类不应该通过 rails 的自动加载来加载吗?
    • docs也用了字符串,供参考。
    【解决方案2】:

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

    它也可以是一个符号。它不能是一个类常量,因为如果你有两个关联的模型,当第一个被加载时,第二个还没有定义,所以这个常量不会被定义,这会报错。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 2019-03-06
      • 2020-05-31
      • 2021-06-21
      • 2015-07-19
      • 2018-10-01
      • 2011-08-22
      • 2021-06-26
      相关资源
      最近更新 更多