Updated/Fixed Item form and item show
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled

This commit is contained in:
2026-05-23 03:18:56 +02:00
parent ae05cb53b6
commit a19cc6984f
4 changed files with 216 additions and 143 deletions

View File

@@ -27,16 +27,23 @@ class ItemsController < ApplicationController
# GET /items/new
def new
@item = Item.new
# Falls wir uns im Turbo-Frame befinden, rendern wir nur das Formular-Teilstück
render partial: "form", locals: { item: @item } if turbo_frame_request?
end
# GET /items/1/edit
def edit
# @item wird bereits über vorab gesetztes set_item geladen
render partial: "form", locals: { item: @item } if turbo_frame_request?
end
# POST /items or /items.json
def create
@item = Item.new(item_params)
# Text-Eingaben in echte IDs auflösen
resolve_assignment_names
respond_to do |format|
if @item.save
format.html { redirect_to @item, notice: "Artikel '#{@item.name}' wurde erfolgreich im System registriert." }
@@ -50,8 +57,13 @@ class ItemsController < ApplicationController
# PATCH/PUT /items/1 or /items/1.json
def update
@item.assign_attributes(item_params)
# Text-Eingaben in echte IDs auflösen
resolve_assignment_names
respond_to do |format|
if @item.update(item_params)
if @item.save
format.html { redirect_to @item, notice: "Artikel '#{@item.name} wurde erfolgreich aktualisiert.", status: :see_other }
format.json { render :show, status: :ok, location: @item }
else
@@ -73,22 +85,37 @@ class ItemsController < ApplicationController
private
def set_item
@item = Item.find(params.expect(:id))
end
def set_item
@item = Item.find(params.expect(:id))
end
# Strong Parameters: Schützt vor Mass-Assignment-Injections
def item_params
params.require(:item).permit(
:name,
:sku,
:sticker_id,
:serial_number,
:price,
:notes,
:category_id,
:user_id, # Für die flexible Zuweisung an Mitarbeiter
:room_id # Für die flexible Zuweisung an Räume
)
# Sucht anhand des eingetippten Namens den passenden Datenbank-Eintrag
def resolve_assignment_names
if params[:item][:user_name].present?
# Wir splitten den Namen in Vor- und Nachname auf
parts = params[:item][:user_name].split(" ")
user = User.find_by(first_name: parts[0], last_name: parts[1])
if user
@item.user_id = user.id
@item.room_id = nil # Sicherstellen, dass der Raum geleert wird
else
@item.errors.add(:base, "Der eingegebene Mitarbeiter existiert nicht im System.")
end
elsif params[:item][:room_name].present?
room = Room.find_by(name: params[:item][:room_name])
if room
@item.room_id = room.id
@item.user_id = nil # Sicherstellen, dass der User geleert wird
else
@item.errors.add(:base, "Der eingegebene Raum existiert nicht im System.")
end
end
end
def item_params
# 'user_name' und 'room_name' müssen in die Strong Parameters aufgenommen werden!
params.require(:item).permit(:name, :sku, :sticker_id, :serial_number, :price, :notes, :category_id, :user_id, :room_id, :user_name, :room_name)
end
end