命名空间模型中的 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::Post
和Persistent::Comment
,那么只需Post.has_many :comments
。在没有 class_name
选项的情况下工作。也许我们正在使用不同的 Rails 版本(我在 4.0.0 上)?
我有两个模型不在同一个命名空间中,这个答案救了我的培根。谢谢!以上是关于命名空间模型中的 Rails 关联的主要内容,如果未能解决你的问题,请参考以下文章
Rails 使用同一命名空间中的模型作为 belongs_to 引用,如何从外部引用模型