Add taken_at to readouts and default unit to quantities

Readouts gain a taken_at timestamp (distinct from created_at) that records
when the measurement was actually taken. Measurements are now ordered by
taken_at descending.

Quantities gain an optional default_unit association. When set, the unit
is pre-selected in the measurement form. A "Set as default" button on the
unit selector lets users update the default directly from the form.

- Migrations: add taken_at (datetime) to readouts,
              add default_unit_id (fk → units) to quantities
- Readout: expose taken_at in ATTRIBUTES permit-list
- Quantity: add default_unit belongs_to, expose in ATTRIBUTES
- QuantitiesController: load @user_units for form actions
- Quantities views: add Default unit column and select to form
- Readouts form: pre-select default unit; add "Set as default" button
  (readoutUnitChanged / setDefaultUnit wired up in a later commit)
- Measurements form: default taken_at input to current time
- ApplicationHelper: propagate :form option to html_options in builder
- config/environments/test.rb: allow Capybara's dynamic host
- Tests: system tests for default-unit UI on the Quantities page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-03 22:01:52 +00:00
parent d893e59293
commit 3702e24153
17 changed files with 190 additions and 7 deletions

View File

@@ -58,4 +58,7 @@ Rails.application.configure do
# config.action_view.annotate_rendered_view_with_filenames = true
config.log_level = :info
# Allow Capybara's dynamic test server host (127.0.0.1:<random_port>)
config.hosts << '127.0.0.1'
end

View File

@@ -11,8 +11,13 @@ en:
activerecord:
attributes:
quantity:
default_unit: Default unit
description: Description
name: Name
readout:
created_at: Recorded at
taken_at: Taken at
value: Value
unit:
base: Base unit
description: Description
@@ -81,6 +86,9 @@ en:
revert: Revert
sign_out: Sign out
source_code: Get code
readouts:
form:
set_default_unit: Set as default unit
measurements:
navigation: Measurements
no_items: There are no measurements taken. You can Add some now.
@@ -89,6 +97,15 @@ en:
taken_at_html: Measurement taken at&emsp;
index:
new_measurement: Add measurement
readout:
destroy: Delete
create:
success:
one: Recorded 1 measurement.
other: Recorded %{count} measurements.
no_readouts: No readouts selected.
destroy:
success: Measurement deleted.
quantities:
navigation: Quantities
no_items: There are no configured quantities. You can Add some or Import from defaults.