需要更改数据库表之间的关系
Need to change relation between DB tables
好的,让我们先了解一下基础知识。
我是 运行 ruby 1.8.7,我使用的是 sequel gem 版本 '2.6.0'。
我有一个名为 Users 的 table 和一个名为 Teams table 的
现在一个用户可以拥有一个团队,因此它的关系是:
belongs_to :npt_team
然而,作为团队功能升级的一部分,我必须做到这一点,以便用户可以属于多个团队。
我想知道的:
我可以将其更改为以下之一:
:has_and_belongs_to_many
:many_to_many
:many_to_many_by_ids
哪个最好用,为什么(因为我想知道)?
其次,当我更改此设置时 table 中的数据库会发生什么?
还有什么我应该注意的of/know?
我正在使用以下 mysql 版本:
mysql Ver 14.14 Distrib 5.6.29, for osx10.11 (x86_64) using EditLine
wrapper
编辑:
哎呀忘了提一个相当中肯的观点。
我没有使用 rails,我使用的是名为 Ramaze 的旧框架作品。
我的问题的答案是:
要创建关系,我需要将以下内容添加到用户 table:
has_and_belongs_to_many(:npt_teams,
:join_table => :users_teams,
:class => 'NptTeam',
:left_key => :user_id,
:right_key => :npt_team_id)
many_to_many_by_ids :npt_teams, 'UsersTeams'
像这样创建一个新连接 table:
class UsersTeams < Sequel::Model
clear_all
set_schema {
primary_key :id
integer :user_id, :null => false, :default => 0
integer :npt_team_id, :null => false, :default => 0
}
create_table unless table_exists?
belongs_to :user
belongs_to :npt_team
end
关系随连接一起创建 table。
我不知道这是否是最好的方法,但它似乎有效。
关于第二个问题,我不知道,目前在DB中的数据似乎没有受到影响。
现在我只需要将当前团队移动到新的 table 就可以了。
至于我可能还需要知道什么,我不知道,因为你知道,那些知道的人已经知道了,但没有回应,所以我只能临场发挥。
编辑:
用于移动数据的脚本:
User.all.each do |user|
join = UsersTeams.create(:user_id => user.id, :npt_team_id => user.npt_team_id)
puts join.inspect
join.save
puts user.npt_teams.to_a.map {|t|t.inspect}.to_s
end
好的,让我们先了解一下基础知识。
我是 运行 ruby 1.8.7,我使用的是 sequel gem 版本 '2.6.0'。
我有一个名为 Users 的 table 和一个名为 Teams table 的
现在一个用户可以拥有一个团队,因此它的关系是:
belongs_to :npt_team
然而,作为团队功能升级的一部分,我必须做到这一点,以便用户可以属于多个团队。
我想知道的:
我可以将其更改为以下之一:
:has_and_belongs_to_many
:many_to_many
:many_to_many_by_ids
哪个最好用,为什么(因为我想知道)?
其次,当我更改此设置时 table 中的数据库会发生什么?
还有什么我应该注意的of/know?
我正在使用以下 mysql 版本:
mysql Ver 14.14 Distrib 5.6.29, for osx10.11 (x86_64) using EditLine wrapper
编辑:
哎呀忘了提一个相当中肯的观点。
我没有使用 rails,我使用的是名为 Ramaze 的旧框架作品。
我的问题的答案是:
要创建关系,我需要将以下内容添加到用户 table:
has_and_belongs_to_many(:npt_teams,
:join_table => :users_teams,
:class => 'NptTeam',
:left_key => :user_id,
:right_key => :npt_team_id)
many_to_many_by_ids :npt_teams, 'UsersTeams'
像这样创建一个新连接 table:
class UsersTeams < Sequel::Model
clear_all
set_schema {
primary_key :id
integer :user_id, :null => false, :default => 0
integer :npt_team_id, :null => false, :default => 0
}
create_table unless table_exists?
belongs_to :user
belongs_to :npt_team
end
关系随连接一起创建 table。
我不知道这是否是最好的方法,但它似乎有效。
关于第二个问题,我不知道,目前在DB中的数据似乎没有受到影响。
现在我只需要将当前团队移动到新的 table 就可以了。
至于我可能还需要知道什么,我不知道,因为你知道,那些知道的人已经知道了,但没有回应,所以我只能临场发挥。
编辑:
用于移动数据的脚本:
User.all.each do |user|
join = UsersTeams.create(:user_id => user.id, :npt_team_id => user.npt_team_id)
puts join.inspect
join.save
puts user.npt_teams.to_a.map {|t|t.inspect}.to_s
end