我有一个用户表和一个团队表。 现在用户只能有一个团队,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
从我看到的教程中可以看出,这是我所需要做的,但是我没有填充表格。我在这里想念什么?
答案 0 :(得分:1)
确保您的User_Teams表应具有user_id
和team_id
列。
如果您有@user
个对象,那么
@user.teams << Team.find(some_team_id)
这段代码将自动在User_Teams表中使用正确的team_id
和user_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列中。