diff --git a/app/controllers/genres_controller.rb b/app/controllers/genres_controller.rb new file mode 100644 index 0000000..2f9f8ef --- /dev/null +++ b/app/controllers/genres_controller.rb @@ -0,0 +1,2 @@ +class GenresController < ApplicationController +end diff --git a/app/helpers/genres_helper.rb b/app/helpers/genres_helper.rb new file mode 100644 index 0000000..1288fa5 --- /dev/null +++ b/app/helpers/genres_helper.rb @@ -0,0 +1,2 @@ +module GenresHelper +end diff --git a/app/models/characterization.rb b/app/models/characterization.rb new file mode 100644 index 0000000..62ef76c --- /dev/null +++ b/app/models/characterization.rb @@ -0,0 +1,4 @@ +class Characterization < ApplicationRecord + belongs_to :movie + belongs_to :genre +end diff --git a/app/models/genre.rb b/app/models/genre.rb new file mode 100644 index 0000000..47a28e3 --- /dev/null +++ b/app/models/genre.rb @@ -0,0 +1,6 @@ +class Genre < ApplicationRecord + validates :name, presence: true, uniqueness: true + + has_many :characterizations, dependent: :destroy + has_many :movies, through: :characterizations +end diff --git a/app/models/movie.rb b/app/models/movie.rb index f45e491..d8a80ec 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -12,6 +12,8 @@ class Movie < ApplicationRecord has_many :reviews, dependent: :destroy has_many :favorites, dependent: :destroy has_many :fans, through: :favorites, source: :user + has_many :characterizations, dependent: :destroy + has_many :genres, through: :characterizations def flop? total_gross.blank? || total_gross < 225_000_000 diff --git a/config/routes.rb b/config/routes.rb index 5326b26..fe2687a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :genres resource :session, only: [:new, :create, :destroy] resources :users resources :reviews diff --git a/db/migrate/20230927130352_create_genres.rb b/db/migrate/20230927130352_create_genres.rb new file mode 100644 index 0000000..ac12347 --- /dev/null +++ b/db/migrate/20230927130352_create_genres.rb @@ -0,0 +1,9 @@ +class CreateGenres < ActiveRecord::Migration[7.0] + def change + create_table :genres do |t| + t.string :name + + t.timestamps + end + end +end diff --git a/db/migrate/20230927130526_create_characterizations.rb b/db/migrate/20230927130526_create_characterizations.rb new file mode 100644 index 0000000..f3c09bf --- /dev/null +++ b/db/migrate/20230927130526_create_characterizations.rb @@ -0,0 +1,10 @@ +class CreateCharacterizations < ActiveRecord::Migration[7.0] + def change + create_table :characterizations do |t| + t.references :movie, null: false, foreign_key: true + t.references :genre, null: false, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8097ebe..67bb35b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,16 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_09_27_123732) do +ActiveRecord::Schema[7.0].define(version: 2023_09_27_130526) do + create_table "characterizations", force: :cascade do |t| + t.integer "movie_id", null: false + t.integer "genre_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["genre_id"], name: "index_characterizations_on_genre_id" + t.index ["movie_id"], name: "index_characterizations_on_movie_id" + end + create_table "favorites", force: :cascade do |t| t.integer "movie_id", null: false t.integer "user_id", null: false @@ -20,6 +29,12 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_27_123732) do t.index ["user_id"], name: "index_favorites_on_user_id" end + create_table "genres", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "movies", force: :cascade do |t| t.string "title" t.string "rating" @@ -52,6 +67,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_27_123732) do t.boolean "admin", default: false end + add_foreign_key "characterizations", "genres" + add_foreign_key "characterizations", "movies" add_foreign_key "favorites", "movies" add_foreign_key "favorites", "users" add_foreign_key "reviews", "movies" diff --git a/test/controllers/genres_controller_test.rb b/test/controllers/genres_controller_test.rb new file mode 100644 index 0000000..c013d38 --- /dev/null +++ b/test/controllers/genres_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class GenresControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end diff --git a/test/fixtures/characterizations.yml b/test/fixtures/characterizations.yml new file mode 100644 index 0000000..f52928a --- /dev/null +++ b/test/fixtures/characterizations.yml @@ -0,0 +1,9 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + movie: one + genre: one + +two: + movie: two + genre: two diff --git a/test/fixtures/genres.yml b/test/fixtures/genres.yml new file mode 100644 index 0000000..7d41224 --- /dev/null +++ b/test/fixtures/genres.yml @@ -0,0 +1,7 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + +two: + name: MyString diff --git a/test/models/characterization_test.rb b/test/models/characterization_test.rb new file mode 100644 index 0000000..830c772 --- /dev/null +++ b/test/models/characterization_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class CharacterizationTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/models/genre_test.rb b/test/models/genre_test.rb new file mode 100644 index 0000000..64029e4 --- /dev/null +++ b/test/models/genre_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class GenreTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end