belongs_to class_name命名空间问题

时间:2013-06-06 18:29:45

标签: ruby-on-rails ruby activerecord

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

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

为何与众不同?这是Rails中的错误(我顺便使用Rails 4.0.0RC1)吗?

不起作用

Bar

作品

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

2 个答案:

答案 0 :(得分:1)

为什么期望::Bar能够正常工作?

当我查看documentation时,我发现:class_name到处都是字符串。我没有看到像::Bar这样的任何单一用法。

答案 1 :(得分:1)

好。我想我会有所不同。

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

所以我认为rails正在做一个将你的:: Bar转换为Bar的to_s。 因此,最好在class_name中使用string来避免意外。