2017-01-18 3 views
0

Je crée d'abord le modèle de jeu initial qui n'est pas encore terminé.Comment ajouter deux colonnes de référence pour créer une migration de table?

rails generate model game room:references p1turn:boolean secret:string wordsofar:string wrongtries:integer 

Je suis en train d'éditer le fichier de migration pour ajouter deux références colonne ou champ. La table doit avoir deux colonnes p1 et p2 référençant chacune un modèle ou une classe utilisateur. En d'autres termes, ces colonnes pointeront vers des modèles ou des enregistrements utilisateur. p1 signifie joueur 1 et p2 signifie joueur 2.

Comment éditer le fichier de migration généré, avant d'exécuter rake db: migrate, pour atteindre l'objectif ci-dessus?

class CreateGames < ActiveRecord::Migration[5.0] 
    def change 
    create_table :games do |t| 
     t.references :room, foreign_key: true 
     t.boolean :p1turn 
     t.string :secret 
     t.string :wordsofar 
     t.integer :wrongtries 
    end 
    end 
end 

J'apprécie toute aide! Merci!

+0

si vous havent engagé et exécuter la migration de son ok pour le modifier. –

+0

merci mais j'ai besoin de connaître les lignes supplémentaires à ajouter dans le fichier de migration afin d'ajouter les deux références qui pointent vers la même table. – kofhearts

+0

Ajout de deux colonnes ne sera pas une bonne idée, car vous ne serez pas en mesure de trouver tous les jeux pour un utilisateur dans une requête –

Répondre

1

Vous pouvez modifier le fichier Migration comme ci-dessous, en ajoutant deux integer columns player1 and player2

class CreateGames < ActiveRecord::Migration[5.0] 
    def change 
    create_table :games do |t| 
     t.references :room, foreign_key: true 
     t.boolean :p1turn 
     t.string :secret 
     t.string :wordsofar 
     t.integer :wrongtries 

     t.integer :player1 
     t.integer :player2 
    end 
    end 
end 

La classe de jeu peut être comme ça,

ce belongs_to deux joueurs faisant référence à la classe utilisateur.

class Game < ActiveRecord::Base 
    belongs_to :player1, :class_name => "User" 
    belongs_to :player2, :class_name => "User" 
end 

Maintenant, la classe User et la relation des joueurs.

class User < ActiveRecord::Base 
    has_many :primary_players, :class_name => "Game", :foreign_key => "player1" 
    has_many :secondary_players, :class_name => "Game", :foreign_key => "player2" 
end 

Ici, je player1 comme référencé primary_players et player2 comme secondary_players.

Maintenant, vous pouvez appeler comme,

User.first.primary_players

User.first.secondary_players