Пользователи и команды - многие ко многим отношениям Ruby - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть таблица пользователей и таблица команд.Сейчас у пользователей может быть только одна команда, в колонке users.team_id есть столбец.Но теперь я хочу, чтобы у пользователей было несколько команд.Поэтому я уже создал таблицу user_teams с user_id и team_id.

Я запустил миграцию так:

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 голосов
/ 18 декабря 2018

Убедитесь, что в вашей таблице User_Teams должны быть столбцы user_id и team_id.

если у вас есть объект @user, то

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

Этот фрагмент кода автоматически создаст новую строку в таблице User_Teams с правами team_id и user_id.

0 голосов
/ 17 декабря 2018

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

Вам нужно будет заполнить новую таблицу UserTeam после завершения миграции.Вы можете сделать это либо в самой миграции, либо через консоль или задачу rake.

После заполнения таблицы UserTeam вы захотите удалить столбец users.team_id.

Я бы тожеДобавьте index: true в оба столбца идентификатора UserTeam.

...