From aa4a8193ce04f178f5d43cc111cc50eb26f547cb Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Fri, 15 Mar 2024 17:16:14 +0100 Subject: [PATCH] Set multiplier to 1 for base units --- app/models/unit.rb | 10 ++++++---- app/views/units/_unit.html.erb | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/models/unit.rb b/app/models/unit.rb index 4e2cff2..08e4d7d 100644 --- a/app/models/unit.rb +++ b/app/models/unit.rb @@ -1,4 +1,6 @@ class Unit < ApplicationRecord + attribute :multiplier, default: 1 + belongs_to :user, optional: true # TODO: validate base.user == user belongs_to :base, optional: true, class_name: "Unit" @@ -6,8 +8,8 @@ class Unit < ApplicationRecord validates :symbol, presence: true, uniqueness: {scope: :user_id}, length: {maximum: columns_hash['symbol'].limit} validates :name, length: {maximum: columns_hash['name'].limit} - validates :multiplier, absence: true, unless: :base - validates :multiplier, presence: true, numericality: {other_than: 0}, if: :base + validates :multiplier, numericality: {equal_to: 1}, unless: :base + validates :multiplier, numericality: {other_than: 0}, if: :base validate if: ->{ base&.base.present? } do errors.add(:base, :multilevel_nesting) end @@ -16,9 +18,9 @@ class Unit < ApplicationRecord scope :ordered, ->{ parent_symbol = Arel::Nodes::NamedFunction.new( 'COALESCE', - [Arel::Table.new(:bases_units)[:symbol], Unit.arel_table[:symbol]] + [Arel::Table.new(:bases_units)[:symbol], arel_table[:symbol]] ) - left_outer_joins(:base).order(parent_symbol, :multiplier) + left_outer_joins(:base).order(parent_symbol, arel_table[:base_id].asc.nulls_first, :multiplier) } before_destroy do diff --git a/app/views/units/_unit.html.erb b/app/views/units/_unit.html.erb index 008fa4f..10c5b24 100644 --- a/app/views/units/_unit.html.erb +++ b/app/views/units/_unit.html.erb @@ -4,7 +4,7 @@ onclick: 'this.blur();', data: {turbo_stream: true} %> <%= unit.name %> - <%= scientifize(unit.multiplier) if unit.multiplier %> + <%= scientifize(unit.multiplier) if unit.base %> <% if current_user.at_least(:active) %>