如何添加两个引用列以创建 table 迁移?

How to add two references column to create table migration?

我首先创建尚未完成的初始游戏模型。

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

我现在正在编辑迁移文件以添加两个引用列或字段。 table 应该有两列 p1 和 p2,每列将引用用户模型或 class。换句话说,这些列都将指向用户模型或记录。 p1 代表玩家 1,p2 代表玩家 2。

在 运行 rake db:migrate 之前,我应该如何编辑生成的迁移文件以实现上述目标?

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

感谢您的帮助!谢谢!

您可以如下更改 Migration 文件,添加两个 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

游戏class可以这样,

这 belongs_to 两名玩家引用用户 class。

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

现在,用户 class 和玩家的关系。

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

这里我将 player1 引用为 primary_players,将 player2 引用为 secondary_players

现在,您可以调用,

User.first.primary_players

User.first.secondary_players