2016-06-15 6 views
0

ok, also lassen Sie uns die Grundlagen aus dem Weg räumen.Müssen die Beziehung zwischen DB-Tabellen ändern

Ich laufe Ruby 1.8.7, ich benutze die Fortsetzung Edelstein Version '2.6.0'.

Ich habe eine Tabelle mit dem Namen Benutzer und eine Tabelle namens Teams

Gerade jetzt ein Benutzer ein Team und haben als solche kann es Beziehung ist:

belongs_to :npt_team 

jedoch als Teil einer Funktion für Teams Upgrade Ich muss es so machen, dass Benutzer von mehreren Teams getrennt sein können.

Was ich wissen will:

ich es eine der folgenden ändern:

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids

welches ist die beste zu benutzen und warum (weil ich es gerne weiß)?

Zweitens, was passiert mit der DB in den Tabellen, wenn ich das ändere?

Alles andere sollte ich vorsichtig sein/wissen?

ich die folgende MySQL-Version bin mit:

mysql Ver 14.14 Distrib 5.6.29, für osx10.11 (x86_64) mit editline Wrapper

EDIT:

Hoppla hat vergessen, einen ziemlich zutreffenden Punkt zu erwähnen.

Ich benutze keine Schienen, ich benutze ein altes Rahmenwerk namens Ramaze.

+0

Standard-Implementierung für RoR ist HABTM Beziehung durch gemeinsame Tabelle ('users_teams' mit Spalten' 'user_id' und team_id'). –

Antwort

0

Die Antwort auf meine Frage ist:

die Beziehung muss ich erstellen Sie die folgende auf die Tabelle Benutzer hinzuzufügen:

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' 

Erstellen einer neuen Join-Tabelle wie folgt:

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 

und die Beziehung wird zusammen mit der Join-Tabelle erstellt.

Ich weiß nicht, ob das der beste Weg ist, es zu tun, aber es scheint zu funktionieren.

Wie für die zweite Frage, weiß ich nicht, die Daten derzeit in der Datenbank scheint nicht davon betroffen zu sein.

Jetzt muss ich nur das aktuelle Team auf die neue Tabelle verschieben und das sollte es sein.

Was ich sonst noch gut wissen müsste, weiß ich nicht, weil die, die wissen, dass sie nicht wissen, nicht antworten, also muss ich es nur noch tun.

EDIT:

Skript zu bewegen Daten über:

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 
Verwandte Themen