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

时间:2017-01-18 08:36:20

标签: ruby-on-rails rails-migrations

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

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

我现在正在编辑迁移文件以添加两个引用列或字段。该表应该有两列p1和p2,每列都引用User模型或类。换句话说,这些列都将指向用户模型或记录。 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

我感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以更改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

Game类可以是这样的,

这个属于两个引用用户类的玩家。

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

现在,User类和玩家关系。

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