From 972d4c24ea2aa47a6135e7fd3aac770fcfba8f11 Mon Sep 17 00:00:00 2001 From: Tarek Belkahia Date: Mon, 27 Oct 2025 13:20:20 +0100 Subject: [PATCH] Finish routes for projects --- app/controllers/projects_controller.rb | 38 ++++++++++++++++++++++++++ app/models/project.rb | 1 + app/views/layouts/application.html.erb | 3 ++ app/views/projects/_form.html.erb | 21 ++++++++++++++ app/views/projects/edit.html.erb | 3 ++ app/views/projects/index.html.erb | 1 + app/views/projects/new.html.erb | 3 ++ app/views/projects/show.html.erb | 2 ++ config/routes.rb | 3 +- 9 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 app/views/projects/_form.html.erb create mode 100644 app/views/projects/edit.html.erb create mode 100644 app/views/projects/new.html.erb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index e3235d2..0573e65 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,10 +1,48 @@ class ProjectsController < ApplicationController + before_action :set_project, only: %i[ show edit update destroy ] def index @projects = Project.all end def show + end + + def new + @project = Project.new + end + + def edit + end + + def create + @project = Project.new(project_params) + + if @project.save + redirect_to @project, notice: "Project successfully created." + else + render :new, status: :unprocessable_entity + end + end + + def update + if @project.update(project_params) + redirect_to @project, notice: "Project successfully updated.", status: :see_other + else + render :edit, status: :unprocessable_entity + end + end + + def destroy + @project.destroy! + redirect_to projects_path, notice: "Project successfully deleted.", status: :see_other + end + + private + def set_project @project = Project.find(params[:id]) end + def project_params + params.expect(project: [ :name ]) + end end diff --git a/app/models/project.rb b/app/models/project.rb index 9c7fe3f..3f00e16 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,2 +1,3 @@ class Project < ApplicationRecord + validates :name, presence: true end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 0ec8c95..3a65097 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -24,6 +24,9 @@ + <% if flash[:notice] %> +

<%= flash[:notice] %>

+ <% end %> <%= yield %> diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb new file mode 100644 index 0000000..2f17c84 --- /dev/null +++ b/app/views/projects/_form.html.erb @@ -0,0 +1,21 @@ +<%= form_with model: project do |f| %> + <% if project.errors.any? %> +
+

<%= pluralize(project.errors.count, "error") %> prohibited this project from being saved:

+ +
+ <% end %> + +
+ <%= f.label :name %> + <%= f.text_field :name %> +
+ +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/projects/edit.html.erb b/app/views/projects/edit.html.erb new file mode 100644 index 0000000..b2347e9 --- /dev/null +++ b/app/views/projects/edit.html.erb @@ -0,0 +1,3 @@ +

Edit Project

+ +<%= render "form", project: @project %> diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb index d1860a1..80801d7 100644 --- a/app/views/projects/index.html.erb +++ b/app/views/projects/index.html.erb @@ -3,3 +3,4 @@ <% @projects.each do |project| %>
  • <%= link_to project.name, project_path(project) %>
  • <% end %> +

    <%= link_to "New project", new_project_path %>

    \ No newline at end of file diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb new file mode 100644 index 0000000..23ac254 --- /dev/null +++ b/app/views/projects/new.html.erb @@ -0,0 +1,3 @@ +

    New project

    + +<%= render "form", project: @project %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 628f33e..d888e38 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -1,2 +1,4 @@

    <%= @project.name %>

    +<%= link_to "Edit", edit_project_path %> +<%= button_to "Delete", project_path, method: :delete %> <%= link_to "Back", projects_path %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 4420d04..903a7ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,6 @@ Rails.application.routes.draw do resources :todos - get "/projects", to: "projects#index" - get "/projects/:id", to: "projects#show", as: "project" + resources :projects # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html