forked from fixin.me/fixin.me
40 lines
1.1 KiB
Ruby
40 lines
1.1 KiB
Ruby
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
|