需要更改数据库表之间的关系

时间:2016-06-15 09:00:21

标签: mysql ruby ruby-1.8.7

好的,所以让我们先了解一下基础知识。

我正在运行ruby 1.8.7,我正在使用续集宝石版“2.6.0”。

我有一个名为Users的表和一个名为Teams的表

现在用户可以拥有一个团队,因此它的关系是:

belongs_to :npt_team

然而,作为团队功能升级的一部分,我必须做到这一点,以便用户可以成为多个团队的一部分。

我想知道的事情:

我可以将其更改为以下之一:

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids

哪一个最好用,为什么(因为我想知道)?

当我改变这个时,表格中DB会发生什么?

我应该警惕/了解其他任何事情吗?

我正在使用以下mysql版本:

  

mysql Ver 14.14使用EditLine为osx10.11(x86_64)分发5.6.29   包装

编辑:

哎呀忘了提到一个相当相关的观点。

我没有使用rails,我使用的是一个名为Ramaze的旧框架。

1 个答案:

答案 0 :(得分:0)

我的问题的答案是:

创建关系我需要将以下内容添加到Users表中:

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'

像这样创建一个新的连接表:

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

并且与联接表一起创建关系。

我不知道这是否是最佳方式,但似乎有效。

至于第二个问题,我不知道,目前数据库中的数据似乎没有受到影响。

现在我只需要将当前的团队移动到新表,那应该是它。

至于我可能需要知道的其他什么,我不这样做,因为你知道,那些知道已经知道的人没有回应,所以我只是不得不放弃它。

编辑:

用于移动数据的脚本:

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