diff --git a/app/controllers/pizzas_controller.rb b/app/controllers/pizzas_controller.rb new file mode 100644 index 0000000..636877b --- /dev/null +++ b/app/controllers/pizzas_controller.rb @@ -0,0 +1,29 @@ +class PizzasController < ApplicationController + def show + @pizza = Pizza.find(params[:id]) + @pizzeria = @pizza.pizzeria + end + + def new + @pizzeria = Pizzeria.find(params[:pizzeria_id]) + @pizza = @pizzeria.pizzas.build + end + + def create + @pizza = Pizza.new(pizza_params) + @pizzeria = @pizza.pizzeria + + if @pizza.save + redirect_to pizzeria_pizza_path(@pizza.pizzeria, @pizza) + else + flash.now.alert = @pizza.errors.full_messages.to_sentence + render :new + end + end + + private + + def pizza_params + params.require(:pizza).permit(:pizzeria_id, :name, :description) + end +end diff --git a/app/controllers/pizzerias_controller.rb b/app/controllers/pizzerias_controller.rb index e302c21..01fa03b 100644 --- a/app/controllers/pizzerias_controller.rb +++ b/app/controllers/pizzerias_controller.rb @@ -5,7 +5,13 @@ def new def create @pizzeria = Pizzeria.create(pizzeria_params) - redirect_to @pizzeria + + if @pizzeria.save + redirect_to @pizzeria + else + flash.now.alert = @pizzeria.errors.full_messages.to_sentence + render :new + end end def show @@ -17,7 +23,8 @@ def index end private + def pizzeria_params - params.require(:pizzeria).permit(:name,:address) + params.require(:pizzeria).permit(:name, :address) end end diff --git a/app/models/pizza.rb b/app/models/pizza.rb new file mode 100644 index 0000000..1aab51e --- /dev/null +++ b/app/models/pizza.rb @@ -0,0 +1,5 @@ +class Pizza < ApplicationRecord + belongs_to :pizzeria + + validates :name, :description, presence: true +end diff --git a/app/models/pizzeria.rb b/app/models/pizzeria.rb index cbedbf7..5fa5cc1 100644 --- a/app/models/pizzeria.rb +++ b/app/models/pizzeria.rb @@ -1,3 +1,5 @@ class Pizzeria < ApplicationRecord - + has_many :pizzas + + validates :name, :address, uniqueness: true end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index be83826..775457e 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -12,6 +12,11 @@

<%= image_tag "prisoners_pizza.png", class: "pizza_logo"%>

The NYC Pizza Society

+ + <% if flash[:alert] %> +
<%= flash[:alert] %>
+ <% end %> + <%= yield %>
diff --git a/app/views/pizzas/new.html.erb b/app/views/pizzas/new.html.erb new file mode 100644 index 0000000..f91bcea --- /dev/null +++ b/app/views/pizzas/new.html.erb @@ -0,0 +1,13 @@ +

Tell us about this pizza you had at <%= @pizzeria.name %>

+ +<%= form_with model: [@pizzeria, @pizza], local: true do |form| %> + <%= form.hidden_field :pizzeria_id %> + + <%= form.label :name %> + <%= form.text_field :name %> + + <%= form.label :description %> + <%= form.text_field :description %> + + <%= form.submit %> +<% end %> diff --git a/app/views/pizzas/show.html.erb b/app/views/pizzas/show.html.erb new file mode 100644 index 0000000..560b046 --- /dev/null +++ b/app/views/pizzas/show.html.erb @@ -0,0 +1,3 @@ +

<%= @pizza.name %> from <%= link_to @pizzeria.name, pizzeria_path(@pizzeria) %>

+ +

Description: <%= @pizza.description %>

diff --git a/app/views/pizzerias/show.html.erb b/app/views/pizzerias/show.html.erb index 32bcfef..f3b2e1b 100644 --- a/app/views/pizzerias/show.html.erb +++ b/app/views/pizzerias/show.html.erb @@ -1,2 +1,12 @@

Pizzeria name: <%= @pizzeria.name %>

Address: <%= @pizzeria.address %>

+ +<%= link_to "Tell us about a great Pizza you had at #{@pizzeria.name}", new_pizzeria_pizza_path(@pizzeria) %> + +


+ +

Great eats from <%= @pizzeria.name %>:

+<% @pizzeria.pizzas.each do |pizza| %> + <%= link_to pizza.name, pizzeria_pizza_path(@pizzeria, pizza) %> +
+<% end %> diff --git a/config/routes.rb b/config/routes.rb index a267746..2e76dcc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,5 @@ Rails.application.routes.draw do - get '/pizzerias/new', to: 'pizzerias#new', as: 'new_pizzeria' - post '/pizzerias', to: 'pizzerias#create', as: 'pizzerias' - get '/pizzerias/:id', to: 'pizzerias#show', as: 'pizzeria' - get '/pizzerias', to: 'pizzerias#index' + resources :pizzerias, only: %i[index show new create] do + resources :pizzas, only: %i[show new create] + end end diff --git a/db/migrate/20240821171832_create_pizzas.rb b/db/migrate/20240821171832_create_pizzas.rb new file mode 100644 index 0000000..69ecf98 --- /dev/null +++ b/db/migrate/20240821171832_create_pizzas.rb @@ -0,0 +1,9 @@ +class CreatePizzas < ActiveRecord::Migration[5.1] + def change + create_table :pizzas do |t| + t.references :pizzeria + t.string :name + t.string :description + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 20bcce4..cfbc6a6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,14 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170814143728) do +ActiveRecord::Schema.define(version: 20240821171832) do + + create_table "pizzas", force: :cascade do |t| + t.integer "pizzeria_id" + t.string "name" + t.string "description" + t.index ["pizzeria_id"], name: "index_pizzas_on_pizzeria_id" + end create_table "pizzerias", force: :cascade do |t| t.string "name"