将多对多关联更改为一对多关联

时间:2015-06-18 08:36:49

标签: ruby-on-rails ruby-on-rails-4

我有两种模式:

User

class User < ActiveRecord::Base
    has_and_belongs_to_many :partners
end

Partner

class Partner < ActiveRecord::Base
    has_and_belongs_to_many :users
end

现在,我想将其更改为:

class User < ActiveRecord::Base
    has_many :partners
end

class Partner < ActiveRecord::Base
    belongs_to :user
end

但是如何通过迁移来实现呢?

1 个答案:

答案 0 :(得分:1)

您可以将模型更改为:

class User < ActiveRecord::Base
  has_many :partners
end

class Partner < ActiveRecord::Base
  belongs_to :user
end

Partner模型应该有user_id

如果您在user_id模型中没有Partner列,则可以按以下方式添加:

rails g migration add_user_id_to_partner user_id:integer

应删除中间表partners_users,因为它是has_many关联。

要删除表,请创建一个空迁移,然后将其添加到迁移文件中。

drop_table :partners_users

然后使用rake db:migrate

运行迁移