用户和团队 - 多对多关系 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_id
和 team_id
列。
如果您@user
反对,那么
@user.teams << Team.find(some_team_id)
这段代码会自动在 User_Teams table 中用右边的 team_id
和 user_id
.
创建一个新行
我有一个用户 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_id
和 team_id
列。
如果您@user
反对,那么
@user.teams << Team.find(some_team_id)
这段代码会自动在 User_Teams table 中用右边的 team_id
和 user_id
.