From 717e64a034547df6abd3515861c3fdc0520f8fc0 Mon Sep 17 00:00:00 2001 From: Artemiy Solopov Date: Sun, 22 Jun 2025 00:52:49 +0300 Subject: [PATCH] Project show and edit --- Gemfile | 2 ++ Gemfile.lock | 6 ++++++ app/controllers/projects_controller.rb | 30 ++++++++++++++++++++++++++ app/helpers/projects_helper.rb | 2 ++ app/javascript/application.js | 3 +++ app/models/project.rb | 5 +++++ app/views/projects/_form.html.slim | 13 +++++++++++ app/views/projects/edit.html.slim | 5 +++++ app/views/projects/index.html.slim | 3 +++ app/views/projects/show.html.slim | 7 ++++++ config/importmap.rb | 2 ++ config/routes.rb | 2 ++ 12 files changed, 80 insertions(+) create mode 100644 app/controllers/projects_controller.rb create mode 100644 app/helpers/projects_helper.rb create mode 100644 app/views/projects/_form.html.slim create mode 100644 app/views/projects/edit.html.slim create mode 100644 app/views/projects/index.html.slim create mode 100644 app/views/projects/show.html.slim diff --git a/Gemfile b/Gemfile index b46d9f7..8b083d2 100644 --- a/Gemfile +++ b/Gemfile @@ -37,6 +37,8 @@ gem "thruster", require: false # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] gem "image_processing", "~> 1.2" +gem 'slim' + group :development, :test do # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem gem "debug", platforms: %i[ mri windows ], require: "debug/prelude" diff --git a/Gemfile.lock b/Gemfile.lock index c8f5b0e..9e6f93b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -228,6 +228,9 @@ GEM ffi (~> 1.12) logger securerandom (0.4.1) + slim (5.2.1) + temple (~> 0.10.0) + tilt (>= 2.1.0) solid_cable (3.0.8) actioncable (>= 7.2) activejob (>= 7.2) @@ -247,12 +250,14 @@ GEM stimulus-rails (1.3.4) railties (>= 6.0.0) stringio (3.1.7) + temple (0.10.3) thor (1.3.2) thruster (0.1.14) thruster (0.1.14-aarch64-linux) thruster (0.1.14-arm64-darwin) thruster (0.1.14-x86_64-darwin) thruster (0.1.14-x86_64-linux) + tilt (2.6.0) timeout (0.4.3) trilogy (2.9.0) turbo-rails (2.0.16) @@ -295,6 +300,7 @@ DEPENDENCIES propshaft puma (>= 5.0) rails (~> 8.0.2) + slim solid_cable solid_cache solid_queue diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb new file mode 100644 index 0000000..37bb441 --- /dev/null +++ b/app/controllers/projects_controller.rb @@ -0,0 +1,30 @@ +class ProjectsController < ApplicationController + before_action :fetch_project!, only: %w[show edit update destroy] + + def index + @projects = Project.all + end + + def show + end + + def edit + end + + def update + if @project.update(params.expect(project: %i[code name description])) + redirect_to @project + else + render :edit, status: :unprocessable_entity + end + end + + def destroy + end + + private + + def fetch_project! + @project = Project.find_by!(code: params[:id]) + end +end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb new file mode 100644 index 0000000..db5c5ce --- /dev/null +++ b/app/helpers/projects_helper.rb @@ -0,0 +1,2 @@ +module ProjectsHelper +end diff --git a/app/javascript/application.js b/app/javascript/application.js index 0d7b494..9ae56c5 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -1,3 +1,6 @@ // Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails import "@hotwired/turbo-rails" import "controllers" + +import "trix" +import "@rails/actiontext" diff --git a/app/models/project.rb b/app/models/project.rb index 663c3de..2ade3d6 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -4,4 +4,9 @@ class Project < ApplicationRecord has_many :tasks has_rich_text :description + + def to_param + return unless id + code + end end diff --git a/app/views/projects/_form.html.slim b/app/views/projects/_form.html.slim new file mode 100644 index 0000000..a970dc2 --- /dev/null +++ b/app/views/projects/_form.html.slim @@ -0,0 +1,13 @@ += form_with model: @project do |form| + .field + = form.label :code + = form.text_field :code + .field + = form.label :name + = form.text_field :name + .field + = form.label :description + = form.rich_textarea :description + .submit + = form.submit 'Submit' + diff --git a/app/views/projects/edit.html.slim b/app/views/projects/edit.html.slim new file mode 100644 index 0000000..386dbee --- /dev/null +++ b/app/views/projects/edit.html.slim @@ -0,0 +1,5 @@ +h1 + span Editing project + span= @project.name + += render 'form' diff --git a/app/views/projects/index.html.slim b/app/views/projects/index.html.slim new file mode 100644 index 0000000..1381e4b --- /dev/null +++ b/app/views/projects/index.html.slim @@ -0,0 +1,3 @@ +ul + - @projects.each do |project| + li= link_to project.name, project diff --git a/app/views/projects/show.html.slim b/app/views/projects/show.html.slim new file mode 100644 index 0000000..a878dad --- /dev/null +++ b/app/views/projects/show.html.slim @@ -0,0 +1,7 @@ +h1= @project.name + +section= @project.description + +section + ul.links + li= link_to 'Edit', edit_project_path(@project) diff --git a/config/importmap.rb b/config/importmap.rb index 909dfc5..6ed7577 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -5,3 +5,5 @@ pin "@hotwired/turbo-rails", to: "turbo.min.js" pin "@hotwired/stimulus", to: "stimulus.min.js" pin "@hotwired/stimulus-loading", to: "stimulus-loading.js" pin_all_from "app/javascript/controllers", under: "controllers" +pin "trix" +pin "@rails/actiontext", to: "actiontext.esm.js" diff --git a/config/routes.rb b/config/routes.rb index 29b007b..7b4b368 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,4 +13,6 @@ Rails.application.routes.draw do # Defines the root path route ("/") # root "posts#index" + + resources :projects end