From 10fee9e69543260d2fb644315f6f4f60b5194017 Mon Sep 17 00:00:00 2001 From: Aaro Koivukangas Date: Wed, 29 Nov 2023 18:33:49 +0200 Subject: [PATCH] 5.11-12 implemented migration --- app/controllers/styles_controller.rb | 2 + app/helpers/styles_helper.rb | 2 + app/models/beer.rb | 2 +- app/models/style.rb | 2 + db/migrate/20231120133953_create_styles.rb | 52 ++++++++++++++++++++++ db/schema.rb | 12 ++++- 6 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 app/controllers/styles_controller.rb create mode 100644 app/helpers/styles_helper.rb create mode 100644 app/models/style.rb create mode 100644 db/migrate/20231120133953_create_styles.rb diff --git a/app/controllers/styles_controller.rb b/app/controllers/styles_controller.rb new file mode 100644 index 0000000..d278b92 --- /dev/null +++ b/app/controllers/styles_controller.rb @@ -0,0 +1,2 @@ +class StylesController < ApplicationController +end diff --git a/app/helpers/styles_helper.rb b/app/helpers/styles_helper.rb new file mode 100644 index 0000000..2a576b0 --- /dev/null +++ b/app/helpers/styles_helper.rb @@ -0,0 +1,2 @@ +module StylesHelper +end diff --git a/app/models/beer.rb b/app/models/beer.rb index 9046efa..e4ea2ad 100644 --- a/app/models/beer.rb +++ b/app/models/beer.rb @@ -6,7 +6,7 @@ class Beer < ApplicationRecord has_many :users, through: :ratings validates :name, presence: true - validates :style, presence: true + validates :style_id, presence: true def to_s "#{name}, #{(Brewery.find_by_id brewery_id).name}" diff --git a/app/models/style.rb b/app/models/style.rb new file mode 100644 index 0000000..cefb022 --- /dev/null +++ b/app/models/style.rb @@ -0,0 +1,2 @@ +class Style < ApplicationRecord +end diff --git a/db/migrate/20231120133953_create_styles.rb b/db/migrate/20231120133953_create_styles.rb new file mode 100644 index 0000000..5ae01d7 --- /dev/null +++ b/db/migrate/20231120133953_create_styles.rb @@ -0,0 +1,52 @@ +class CreateStyles < ActiveRecord::Migration[7.0] + def self.up + create_table :styles do |t| + t.index :id + t.text :name + + t.timestamps + end + + change_table :beers do |t| + t.rename :style, :old_style + t.references :style + end + + Beer.all.each do |beer| + style = Style.find_by name: beer.old_style + if style.nil? + Style.create name: beer.old_style + end + end + + Beer.all.each do |beer| + style = Style.find_by name: beer.old_style + + if style.nil? + Beer.update beer.id, { :style_id => 1 } + else + Beer.update beer.id, { :style_id => style.id } + end + end + + remove_column :beers, :old_style + end + + def self.down + add_column :beers, :style, :text + + Beer.all.each do |beer| + style = Style.find_by id: beer.style_id + if style.nil? + Beer.update beer.id, { :style => "IPA" } + else + Beer.update beer.id, { :style => style.name } + end + end + + remove_column :beers, :style_id + remove_column :beers, :old_style + + drop_table :styles + end +end diff --git a/db/schema.rb b/db/schema.rb index 1478daf..37c5019 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_08_10_180821) do +ActiveRecord::Schema[7.0].define(version: 2023_11_20_133953) do create_table "beerclubs", force: :cascade do |t| t.string "name" t.integer "founded" @@ -21,10 +21,11 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_10_180821) do create_table "beers", force: :cascade do |t| t.string "name" - t.string "style" t.integer "brewery_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "style_id" + t.index ["style_id"], name: "index_beers_on_style_id" end create_table "breweries", force: :cascade do |t| @@ -49,6 +50,13 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_10_180821) do t.integer "user_id" end + create_table "styles", force: :cascade do |t| + t.text "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["id"], name: "index_styles_on_id" + end + create_table "users", force: :cascade do |t| t.string "username" t.datetime "created_at", null: false