bug fixing using cursor

This commit is contained in:
Stefan Tollkühn
2025-09-10 13:45:29 +02:00
parent 06bea4cf46
commit 59e63cee2f
6 changed files with 15 additions and 6 deletions

View File

@@ -49,8 +49,15 @@ class ClientsController < ApplicationController
# DELETE /clients/1 or /clients/1.json
def destroy
@client.destroy!
if @client.referenced_count > 0
respond_to do |format|
format.html { redirect_to clients_path, alert: "Client is referenced by subprojects and cannot be deleted." }
format.json { render json: { error: "Client has references" }, status: :unprocessable_entity }
end
return
end
@client.destroy!
respond_to do |format|
format.html { redirect_to clients_path, status: :see_other, notice: "Client was successfully destroyed." }
format.json { head :no_content }

View File

@@ -10,9 +10,9 @@ module SubprojectsHelper
def subproject_form_input(form, attrib, subproject)
case attrib
when :project
form.collection_select :project_id, Project.all, :id, ->(project) { project.name }, prompt: "Select Project"
form.collection_select :project_id, Project.all, :id, :name, prompt: "Select Project"
when :client, :owner, :builder
form.collection_select "#{attrib}_id", Client.all, :id, ->(client) { "#{client.company_name} (#{client.lastname}, #{client.firstname})" }, prompt: "Select #{attrib.to_s.capitalize}"
form.collection_select "#{attrib}_id", Client.all, :id, :display_name, prompt: "Select #{attrib.to_s.capitalize}"
else
form.text_field attrib, value: subproject.send(attrib)
end

View File

@@ -13,4 +13,8 @@ class Client < ApplicationRecord
def editable?
referenced_count <= 1
end
def display_name
"#{company_name} (#{lastname}, #{firstname})"
end
end

View File

@@ -1,5 +1,5 @@
class Project < ApplicationRecord
has_many :subprojects, inverse_of: :project
has_many :subprojects, inverse_of: :project, dependent: :destroy
accepts_nested_attributes_for :subprojects, allow_destroy: true, reject_if: :all_blank
validates :name, presence: true

View File

@@ -56,8 +56,6 @@
</div>
<% end %>
</div>
<div>
<%= form.submit %>
</div>