From 864769e70aff577bb7d350d40e55e1fc6050c2d5 Mon Sep 17 00:00:00 2001 From: Artemiy Solopov Date: Sun, 22 Jun 2025 18:31:03 +0300 Subject: [PATCH] Project create --- app/controllers/projects_controller.rb | 19 ++++++++++++++++++- app/models/project.rb | 11 +++++++++++ app/views/projects/new.html.slim | 3 +++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 app/views/projects/new.html.slim diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 37bb441..8be156c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -8,11 +8,24 @@ class ProjectsController < ApplicationController def show end + def new + @project = Project.new + end + + def create + @project = Project.new(project_params) + if @project.save + redirect_to @project + else + render :new, status: :unprocessable_entity + end + end + def edit end def update - if @project.update(params.expect(project: %i[code name description])) + if @project.update(project_params) redirect_to @project else render :edit, status: :unprocessable_entity @@ -27,4 +40,8 @@ class ProjectsController < ApplicationController def fetch_project! @project = Project.find_by!(code: params[:id]) end + + def project_params + params.expect(project: %i[code name description]) + end end diff --git a/app/models/project.rb b/app/models/project.rb index 2ade3d6..834b3f0 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,12 +1,23 @@ class Project < ApplicationRecord validates :name, :code, presence: true + validates :code, exclusion: { in: %w[new] }, uniqueness: true has_many :tasks has_rich_text :description + before_validation :lowercase_code + def to_param return unless id code end + + private + + def lowercase_code + return if code.blank? + + self.code = self.code.downcase + end end diff --git a/app/views/projects/new.html.slim b/app/views/projects/new.html.slim new file mode 100644 index 0000000..707bec8 --- /dev/null +++ b/app/views/projects/new.html.slim @@ -0,0 +1,3 @@ +h1 New project + += render 'form'