【问题标题】:belongs_to class_name namespace issuesbelongs_to class_name 命名空间问题
【发布时间】:2013-06-06 18:29:45
【问题描述】:

我有两个型号Foo::BarBarFoo::Bar 属于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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    好的。我想我明白了。

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

    所以我认为 rails 正在某个地方将您的 ::Bar 转换为 Bar。 所以最好使用字符串作为 class_name 以避免意外。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我一直在我的应用程序中的多个其他地方使用它,在此问题之前没有任何问题。
      • 您确定它在关联名称与类名称不同的情况下有效吗?
      • 是的。我很乐观。我有一个has_many :current_jobs,其中:class_nameJob,它可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2013-03-26
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多