用户和团队-多对多关系Ruby

时间:2018-12-17 20:02:23

标签: ruby activerecord rails-activerecord

我有一个用户表和一个团队表。 现在用户只能有一个团队,users.team_id中有一列。 但是现在我想让用户拥有多个团队成为可能。 所以我已经用user_id和team_id创建了一个user_teams表。

我这样进行迁移:

  

migrations / create_users_teams

class CreateUsersTeams < ActiveRecord::Migration[5.0]
  def change
    create_table :user_teams do |t|
      t.belongs_to :user, foreign_key: true, null: false
      t.references :team, foreign_key: true, null: false

      t.timestamps null: false
    end
  end
end

我的代码如下:

  

models / user.rb

    class User < ApplicationRecord

    #belongs_to :team

    # should now have multiple teams
    has_many :user_teams
    has_many :teams, through: :user_teams
  

models / team.rb

class Team < ApplicationRecord

has_many :user_teams
has_many :users, through: :user_teams
  

models / user_teams.rb(新文件)

class UserTeam < ApplicationRecord
  belongs_to :user
  belongs_to :team
end

从我看到的教程中可以看出,这是我所需要做的,但是我没有填充表格。我在这里想念什么?

2 个答案:

答案 0 :(得分:1)

确保您的User_Teams表应具有user_idteam_id列。

如果您有@user个对象,那么

@user.teams << Team.find(some_team_id)

这段代码将自动在User_Teams表中使用正确的team_iduser_id创建新行。

答案 1 :(得分:0)

User.in_batches.each_record { |user| UserTeam.create(user: user, team_id: user.team_id) }

迁移完成后,您将需要填充新的UserTeam表。您可以在迁移本身中执行此操作,也可以通过控制台或rake任务执行此操作。

在填充UserTeam表之后,您将希望删除users.team_id列。

我还将index: true添加到UserTeam的两个id列中。