has_many使用类与class_name

时间:2015-06-02 18:34:25

标签: ruby-on-rails

我一直在为这样的自定义has_many关联建模:

has_many :friends, class: User

我最近发现这种风格没有记录,API文档:

has_many :friends, class_name: 'User'

我没有注意到前一种语法有任何问题,我很好奇为什么使用后面的语法(避免将字符串转换为类不是更好吗?)。有没有理由从前者转为后者?

2 个答案:

答案 0 :(得分:3)

即将推出的 rails class版本已经renamed to anonymous_class了。虽然它仍然在分支中。使用:class时出现问题,此处来自commit

  

在1f006c中添加了一个名为:class的选项,允许传递匿名   类到关联定义。由于使用:class而不是   :class_name即使在经验丰富的开发人员中也是一个相当普遍的错字   这可能导致在raise_on_type_mismatch中出现难以调试的错误?

     

为了解决这个问题,我们将选项从:class重命名为:anonymous_class as   这是对该选项的更正确的描述。从此   是一个内部的,没有证件的选项,不需要弃用。

位于4-2-stable

  

在关联选项中将:class重命名为:anonymous_class。修复#19659

答案 1 :(得分:0)

如果需要动态定义类或运行一个返回类的方法,那么第一个选项将非常有用。

老实说,虽然我无法想出一个理想的方案,但这是一个理想的方法。