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

Users and teams - Many to many relationships Ruby

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

创建了一个 user_teams table

我 运行 迁移是这样的:

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 (new file)

class UserTeam < ApplicationRecord
  belongs_to :user
  belongs_to :team
end

根据我观看的教程,这就是我需要做的所有事情,但我没有填充 table。我在这里错过了什么?

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

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

填充 UserTeam 后 table 您需要删除 users.team_id 列。

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

确保您的 User_Teams table 应该有 user_idteam_id 列。

如果您@user反对,那么

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

这段代码会自动在 User_Teams table 中用右边的 team_iduser_id.

创建一个新行