class MeasurementsController < ApplicationController before_action except: :index do raise AccessForbidden unless current_user.at_least(:active) end def index readouts = current_user.readouts.includes(:quantity, :unit).order(created_at: :desc) @measurements = readouts.group_by(&:created_at).map do |created_at, grouped| Measurement.new(created_at: created_at, readouts: grouped) end end def new @quantities = current_user.quantities.ordered end def create timestamp = Time.current @readouts = readout_params.map do |rp| r = current_user.readouts.new(rp) r.created_at = timestamp r end if @readouts.all?(&:valid?) Readout.transaction { @readouts.each(&:save!) } @measurement = Measurement.new(readouts: @readouts, created_at: timestamp) flash.now[:notice] = t('.success') else render :new, status: :unprocessable_entity end end def destroy @measurement = Measurement.new(id: params[:id].to_i, created_at: Time.at(params[:id].to_i)) current_user.readouts.where(created_at: @measurement.created_at).delete_all @measurements_empty = current_user.readouts.empty? flash.now[:notice] = t('.success') end private def readout_params params.require(:readouts).map { |r| r.permit(:quantity_id, :value, :unit_id) } end end