3 - Ajout du modele Combat

pull/1/head
Karim Bogtob 2 years ago
parent eb3d317a5c
commit a3fb5fe0d1

@ -111,3 +111,30 @@ irb(main):012:0> Creature.first
updated_at: Sun, 26 Mar 2023 14:11:33.479248000 UTC +00:00,
size: "giant">
```
Question 3 :
* Je génère la migration pour ajouter les combats avec : `rails g migration CreateCombat result:integer name:string left_fighter:references right_fighter:references winner:references`
Cette migration sera pré-chargée avec :
```ruby
class CreateCombat < ActiveRecord::Migration[7.0]
def change
create_table :combats do |t|
t.integer :result
t.string :name
t.references :left_fighter, null: false, foreign_key: true
t.references :right_fighter, null: false, foreign_key: true
t.references :winner, null: false, foreign_key: true
t.timestamps
end
end
end
```
Il va falloir préciser vers quelle table doit pointer la foreign key, pour ça on remplace `foreign_key: true` par `foreign_key: { to_table: 'creatures' }`.
On remplacera aussi le `null: false` de la référence `winner` pour supporter de ne pas en avoir.

@ -0,0 +1,7 @@
class Combat < ApplicationRecord
enum :result, [:draw, :domination]
belongs_to :left_fighter, class_name: 'Creature'
belongs_to :right_fighter, class_name: 'Creature'
belongs_to :winner, class_name: 'Creature'
end

@ -0,0 +1,13 @@
class CreateCombat < ActiveRecord::Migration[7.0]
def change
create_table :combats do |t|
t.integer :result
t.string :name
t.references :left_fighter, null: false, foreign_key: { to_table: 'creatures' }
t.references :right_fighter, null: false, foreign_key: { to_table: 'creatures' }
t.references :winner, null: true, foreign_key: { to_table: 'creatures' }
t.timestamps
end
end
end

18
db/schema.rb generated

@ -10,7 +10,20 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2023_03_26_140943) do
ActiveRecord::Schema[7.0].define(version: 2023_03_26_160630) do
create_table "combats", force: :cascade do |t|
t.integer "result"
t.string "name"
t.integer "left_fighter_id", null: false
t.integer "right_fighter_id", null: false
t.integer "winner_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["left_fighter_id"], name: "index_combats_on_left_fighter_id"
t.index ["right_fighter_id"], name: "index_combats_on_right_fighter_id"
t.index ["winner_id"], name: "index_combats_on_winner_id"
end
create_table "creatures", force: :cascade do |t|
t.string "name"
t.integer "health_points"
@ -19,4 +32,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_26_140943) do
t.integer "size"
end
add_foreign_key "combats", "creatures", column: "left_fighter_id"
add_foreign_key "combats", "creatures", column: "right_fighter_id"
add_foreign_key "combats", "creatures", column: "winner_id"
end

Loading…
Cancel
Save