Updated/Fixed Item form and item show
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user