diff --git a/README.md b/README.md index bca034a..a867411 100644 --- a/README.md +++ b/README.md @@ -110,4 +110,31 @@ irb(main):012:0> Creature.first created_at: Sun, 26 Mar 2023 13:19:57.492017000 UTC +00:00, updated_at: Sun, 26 Mar 2023 14:11:33.479248000 UTC +00:00, size: "giant"> -``` \ No newline at end of file +``` + +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. + diff --git a/app/models/combat.rb b/app/models/combat.rb new file mode 100644 index 0000000..26d62d2 --- /dev/null +++ b/app/models/combat.rb @@ -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 diff --git a/db/migrate/20230326160630_create_combat.rb b/db/migrate/20230326160630_create_combat.rb new file mode 100644 index 0000000..48fd7fb --- /dev/null +++ b/db/migrate/20230326160630_create_combat.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 4104bde..bfe541a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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