如何将“has_many”关联和字段从一个集合移动到另一个集合?

时间:2011-11-27 06:49:06

标签: ruby-on-rails migration mongoid has-many

我对RoR很新。对不起,如果我使用错误的术语或答案是显而易见的。

最初我有一个用户模型如下,

class User
  include Mongoid::Document

  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :trackable,
         :validatable,
         :token_authenticatable,
         :omniauthable

  has_many :foos
  field :name, :type => String
  # Some other company fields
  ....
end

class Foo
  include Mongoid::Document

  belongs_to :user
  ...
end

此初始用户模型用于代表公司。

然后我决定添加另一个与初始User模型具有不同角色的模型,因此我开始使用多态关联并将必要的字段从User移动到Company模型。我还添加了一个与公司没有直接关系的经理模型。我基本上使用User model for devise。

class User
  include Mongoid::Document

  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :trackable,
         :validatable,
         :token_authenticatable,
         :omniauthable

  belongs_to :rolable, :polymorphic => true
end

class Company
  include Mongoid::Document

  has_one :user, :as => :rolable

  has_many :foos
  field :name, :type => String
  # Some other company fields
  ....
end

class Manager
  include Mongoid::Document

  has_one :user, :as => rolable
end

class Foo
  include Mongoid::Document

  belongs_to :company
  ...
end

到目前为止,新用户注册似乎一切正常。但是,我必须转换旧的数据库。令我困惑的是我之前拥有的has_many协会。我已经实现了迁移(使用此gem,https://github.com/adacosta/mongoid_rails_migrations)将字段从User模型移动到Company模型,但我再也无法弄清楚如何处理关联。

1 个答案:

答案 0 :(得分:1)

如果您不需要将旧数据库中的信息传输到新数据库,则无需运行迁移。

MongoDB可以在文档上有一些无用的密钥,没有问题。您可以遇到的唯一问题是在数据库中保存额外的八位字节。