1

我有两个模型Foo::BarBar. Foo::Bar属于_to Bar。当您尝试调用时会出现问题@bar.bar(在这种情况下,@bar 是 的一个实例Foo::Bar)。

如果您:class_name使用引号定义,那么一切都按预期工作,但如果您使用引号,那么您将返回一个Foo::Bar实例而不是一个Bar实例。

为什么有区别?这是 Rails 中的错误吗(顺便说一下,我使用的是 Rails 4.0.0RC1)?

不工作

class Foo::Bar < ActiveRecord::Base
  belongs_to :bar,
  class_name: ::Bar
end

作品

class Foo::Bar < ActiveRecord::Base
  belongs_to :bar,
  class_name: '::Bar'
end
4

2 回答 2

2

好的。我想我明白了。

Bar.to_s -> "Bar"
::Bar.to_s -> "Bar"

所以我认为 Rails 正在某处将您的 ::Bar 转换为 Bar。因此最好使用字符串作为 class_name 以避免意外。

于 2013-06-06T19:02:29.567 回答
1

你为什么希望::Bar工作?

当我查看文档时,我发现:class_names 到处都是字符串。我没有看到类似::Bar.

于 2013-06-06T18:54:11.750 回答