class MeasurementsController < ApplicationController before_action :find_readout, only: :destroy before_action except: :index do raise AccessForbidden unless current_user.at_least(:active) end def index @measurements = current_user.readouts.includes(:quantity, :unit).order(created_at: :desc) end def new @quantities = current_user.quantities.ordered end def create readout_params = params.permit(readouts: Readout::ATTRIBUTES).fetch(:readouts, []) @readouts = readout_params.map { |rp| current_user.readouts.build(rp) } if @readouts.present? && @readouts.all?(&:valid?) ActiveRecord::Base.transaction { @readouts.each(&:save!) } flash.now[:notice] = t('.success', count: @readouts.size) else errors = @readouts.flat_map { |r| r.errors.full_messages } flash.now[:alert] = errors.present? ? errors.first : t('.no_readouts') end end def destroy @readout.destroy! flash.now[:notice] = t('.success') end private def find_readout @readout = current_user.readouts.find(params[:id]) end end