change association from one to many to many to many

廉价感情. 提交于 2019-12-25 02:26:58

问题


I have two models lets suppose

class A < ActiveRecord::Base
  has_many :bs
end
class B < ActiveRecord::Base
  belogns_to :a
end

now because of some system changes I need to convert this association to many to many some thing like this

class A < ActiveRecord::Base
  has_and_belongs_to_many :bs
end
class B < ActiveRecord::Base
  has_and_belongs_to_many :as
end

OR

class A < ActiveRecord::Base
  has_many :cs
  has_many :bs, through: :cs
end
class B < ActiveRecord::Base
  has_many :cs
  has_many :as, through: :cs
end
class C < ActiveRecord::Base
  belongs_to :a
  belongs_to :b
end

what is best way to do this and most importantly I DO NOT WANT TO LOSE MY EXISTING DATA. Existing records should automatically adopt these changes. Thanks in advance.


回答1:


many to many means you have connected table(model) between two other, so you could just create this one and write relation to it, after that you could remove garbage ids from B.

A, B are not good names;)

imagine you have User and Comments, and you decide that comments can have also many users, so it can look like:

class User
  has_many :comments # will be changed

  has_many :user_comments
end

class UserComments
  belong_to :user
  belong_to :comment
end

class Comment
  belong_to :user # id will be removed from table and relation will be changed

  has_many :user_comments
end

# as direction for import could be something like:

User.all.each do |user|
  user.comments.each do |comment|
    UserComments.create user: user, comment: comment
  end
end


来源:https://stackoverflow.com/questions/25492415/change-association-from-one-to-many-to-many-to-many

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!