2016-06-15 15 views
0

大丈夫ですので、基本を理解できます。DBテーブル間の関係を変更する必要があります

私はruby 1.8.7を実行していますが、私はsequel gem version '2.6.0'を使用しています。

私はユーザーのテーブルと呼ばれていると

今、ユーザーが1つのチームを持っていると、このようなことの関係としてできるチームと呼ばれるテーブルは次のとおりです。チームのために機能のアップグレードの一環として、しかし

belongs_to :npt_team 

私はそれを作る必要があるので、ユーザーは複数のチームから分けることができます。私が知りたいのは何

私は、次のいずれかに変更することができます:1が最高である

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids

なぜ私は知りたいのですか?

第二に、私はこれを変更するとテーブル内のDBに何が起こりますか?

他にも気をつけなければならないことは何ですか?私は、次のMySQLバージョン使用してい

mysqlの按分5.6.29 14.14版を、EditLine を使用してosx10.11(x86_64版)ラッパーの

EDIT:

Ooopsは、かなり適切な点に言及するのを忘れていました。

私はレールを使用していません、私はRamazeと呼ばれる古いフレームワークを使用しています。

+0

標準的な実装は、ジョイントテーブルを介してHABTM関係(列 'user_id'と' team_id'と 'users_teams')です。 –

答えて

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 

があり、その関係は結合テーブルとともに作成されます。

これが最善の方法かどうかわかりませんが、うまくいくようです。

2番目の質問については、わかりませんが、DBに現在あるデータは影響を受けていないようです。

これで、現在のチームを新しいテーブルに移動するだけでよいのです。

私がよく知る必要がある他のものについては、あなたが知っていることを知っていることを知っていることを知っている人は、応答していないので、私はそれを翼にするつもりです。

EDIT:間でデータを移動する

スクリプト:RoRのため

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 
関連する問題