forked from fixin.me/fixin.me
Implement measurements create/destroy and index listing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,13 @@
|
|||||||
class MeasurementsController < ApplicationController
|
class MeasurementsController < ApplicationController
|
||||||
|
before_action except: :index do
|
||||||
|
raise AccessForbidden unless current_user.at_least(:active)
|
||||||
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@measurements = []
|
readouts = current_user.readouts.includes(:quantity, :unit).order(created_at: :desc)
|
||||||
#@measurements = current_user.units.ordered.includes(:base, :subunits)
|
@measurements = readouts.group_by(&:created_at).map do |created_at, grouped|
|
||||||
|
Measurement.new(created_at: created_at, readouts: grouped)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@@ -9,8 +15,33 @@ class MeasurementsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create
|
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
|
end
|
||||||
|
|
||||||
def destroy
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,3 +1,17 @@
|
|||||||
class Measurement
|
class Measurement
|
||||||
include ActiveModel::Model
|
include ActiveModel::Model
|
||||||
|
|
||||||
|
attr_accessor :readouts, :created_at
|
||||||
|
|
||||||
|
def id
|
||||||
|
created_at.to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_param
|
||||||
|
id.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
def persisted?
|
||||||
|
true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
14
app/views/measurements/_measurement.html.erb
Normal file
14
app/views/measurements/_measurement.html.erb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<%= tag.tr id: dom_id(measurement) do %>
|
||||||
|
<td><%= l measurement.created_at, format: :short %></td>
|
||||||
|
<td>
|
||||||
|
<% measurement.readouts.each do |readout| %>
|
||||||
|
<span><%= readout.quantity.name %>: <%= readout.value %> <%= readout.unit %></span>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<% if current_user.at_least(:active) %>
|
||||||
|
<td class="actions">
|
||||||
|
<%= image_button_to t('.destroy'), 'delete-outline', measurement_path(measurement),
|
||||||
|
method: :delete %>
|
||||||
|
</td>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
5
app/views/measurements/create.turbo_stream.erb
Normal file
5
app/views/measurements/create.turbo_stream.erb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<%= turbo_stream.update :flashes %>
|
||||||
|
<%= turbo_stream.remove :measurement_form %>
|
||||||
|
<%= turbo_stream.remove :no_items %>
|
||||||
|
<%= turbo_stream.enable :new_measurement_link %>
|
||||||
|
<%= turbo_stream.prepend :measurements, @measurement %>
|
||||||
3
app/views/measurements/destroy.turbo_stream.erb
Normal file
3
app/views/measurements/destroy.turbo_stream.erb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<%= turbo_stream.update :flashes %>
|
||||||
|
<%= turbo_stream.remove @measurement %>
|
||||||
|
<%= turbo_stream.append(:measurements, render_no_items) if @measurements_empty %>
|
||||||
@@ -88,6 +88,12 @@ en:
|
|||||||
select_quantity: select the measured quantities...
|
select_quantity: select the measured quantities...
|
||||||
index:
|
index:
|
||||||
new_measurement: Add measurement
|
new_measurement: Add measurement
|
||||||
|
create:
|
||||||
|
success: Measurement saved.
|
||||||
|
destroy:
|
||||||
|
success: Measurement deleted.
|
||||||
|
measurement:
|
||||||
|
destroy: Delete
|
||||||
readouts:
|
readouts:
|
||||||
form:
|
form:
|
||||||
select_unit: ...
|
select_unit: ...
|
||||||
|
|||||||
Reference in New Issue
Block a user