我有两个模型之间的关系,目前是多对多。我想将它转变为一对一的关系,因为这就是所有数据的结果。
有没有无缝的方法来做到这一点?通过迁移和模型更改组合?我的模型很容易改变,如下所示:
现在
class App < ActiveRecord::Base
has_and_belongs_to_many :owners
end
class Owner < ActiveRecord::Base
has_and_belongs_to_many :apps
end
更改为
class App < ActiveRecord::Base
belongs_to :owner
end
class Owner < ActiveRecord::Base
has_one :app
end
但是如何更新数据库以反映这些变化而不会丢失我目前拥有的任何数据?
答案 0 :(得分:1)
在owner_id
表中添加apps
字段,然后遍历您的apps_owners
表,并将owner_id
中的apps
字段设置为{{1} } owner_id
记录apps_owners
等于apps
的{{1}}记录。
假设你是正确的并且SQL之后的同一id
没有多个app_id
条目应该这样做(未经测试),尽管我不熟悉如何合并原始SQL进入迁移:
apps_owners
答案 1 :(得分:0)
你将无法做到这一点。主要问题是has_and_belongs_to_many
关系使用第三级数据库表(在您的情况下为apps_owners
)来保存关系信息。
在创建适当的迁移以将owner_id
添加到App
模型后,您需要创建一个rake任务,该任务会读取app_owner
表并重新创建关系。