命名空间模型中的 Rails 关联

Posted

技术标签:

【中文标题】命名空间模型中的 Rails 关联【英文标题】:Rails associations in namespaced models 【发布时间】:2013-05-28 06:14:25 【问题描述】:

我正在重新开发一个应用程序并从一个旧应用程序迁移数据。一些模型名称将是相同的,但不是全部。

我正在编写一个 rake 任务来连接旧数据库、读取记录、做一些事情并将结果写入新数据库。因为某些表名是相同的模型名称将是相同的,所以我想命名空间我的模型像这样

module OldData
    class Account <ActiveRecord::Base
      has_many :subcriptions
      establish_connection $olddb  
    end

    class Subscription <ActiveRecord::Base
      belongs_to :account
      establish_connection $olddb  
    end
end

其中 $olddb 是连接旧数据库所需的哈希

我可以打开帐户记录并阅读它们,但帐户模型没有订阅关联。最新的 Rails 文档表明这应该可行。但事实并非如此。

有什么建议吗?

【问题讨论】:

如果您遵循约定并将每个模型放在以该模型命名的单独文件中,那么它很有可能会起作用。 【参考方案1】:

也许你应该尝试明确设置类名

has_many :subcriptions, class_name: 'OldData::Subscription'

belongs_to :account, class_name: 'OldData::Account' 

【讨论】:

如果两个模型都在同一个命名空间中,则不需要这样做。 其实你是对的。但是由于某种原因,如果模型是自定义命名空间,您需要显式指定命名空间。也许这是一个错误?或者也许我错过了什么。 自定义命名空间是什么意思?如果我有Persistent::PostPersistent::Comment,那么只需Post.has_many :comments。在没有 class_name 选项的情况下工作。也许我们正在使用不同的 Rails 版本(我在 4.0.0 上)? 我有两个模型不在同一个命名空间中,这个答案救了我的培根。谢谢!

以上是关于命名空间模型中的 Rails 关联的主要内容,如果未能解决你的问题,请参考以下文章

Rails 中的命名空间模型:联合的状态是啥?

删除存在于另一个命名空间 rails 中的模型

Rails 使用同一命名空间中的模型作为 belongs_to 引用,如何从外部引用模型

如何避免 Rails 脚手架将模型放入命名空间

Rails 4:在没有命名空间模型的子路径中组织 Rails 模型?

Rails url_for 和命名空间模型