diff --git a/app/helpers/body_trackers_helper.rb b/app/helpers/body_trackers_helper.rb
index 6a6b047..6ce9359 100644
--- a/app/helpers/body_trackers_helper.rb
+++ b/app/helpers/body_trackers_helper.rb
@@ -1,13 +1,13 @@
module BodyTrackersHelper
def format_value(value)
- amount, unitname = value
+ amount, unit = value
case
when amount.nil?
'-'
when amount.nan?
'?'
else
- "#{amount} [#{unitname || '-'}]"
+ "#{amount} [#{unit.shortname || '-'}]"
end
end
diff --git a/app/models/formula.rb b/app/models/formula.rb
index ce8122e..a2b8d03 100644
--- a/app/models/formula.rb
+++ b/app/models/formula.rb
@@ -33,7 +33,7 @@ class Formula < ActiveRecord::Base
"length.times.map { |index| #{p[:content]} }" : p[:content]
args << get_binding(quantities, args, length).eval(code)
end
- args.last.map { |v| [v, nil] }
+ args.last.map { |v| [v, self.unit] }
end
private
diff --git a/app/views/ingredients/_index.html.erb b/app/views/ingredients/_index.html.erb
index c05ac9c..926323c 100644
--- a/app/views/ingredients/_index.html.erb
+++ b/app/views/ingredients/_index.html.erb
@@ -2,7 +2,7 @@
locals: {url: filter_project_ingredients_path(@project)} %>
<% if @ingredients.any? { |i| i.persisted? } %>
- <%= error_messages_for @formula_q.formula %>
+ <%= error_messages_for @formula_q.formula if @formula_q %>
diff --git a/app/views/ingredients/_nutrients.html.erb b/app/views/ingredients/_nutrients.html.erb
index 0a40d71..a779627 100644
--- a/app/views/ingredients/_nutrients.html.erb
+++ b/app/views/ingredients/_nutrients.html.erb
@@ -4,7 +4,9 @@
<% if @ingredients.any? %>
<%= render partial: 'ingredients/options' %>
- <%= error_messages_for @formula_q.formula, *@quantities.map { |q| q.formula } %>
+ <% formulas = @quantities.map { |q| q.formula } %>
+ <% formulas.unshift(@formula_q.formula) if @formula_q %>
+ <%= error_messages_for *formulas %>
diff --git a/app/views/measurements/_index.html.erb b/app/views/measurements/_index.html.erb
index 292177d..a59cdd3 100644
--- a/app/views/measurements/_index.html.erb
+++ b/app/views/measurements/_index.html.erb
@@ -2,7 +2,7 @@
locals: {url: filter_project_measurements_path(@project)} %>
<% if @measurements.any? { |m| m.persisted? } %>
- <%= error_messages_for @formula_q.formula %>
+ <%= error_messages_for @formula_q.formula if @formula_q %>
diff --git a/app/views/measurements/_readouts.html.erb b/app/views/measurements/_readouts.html.erb
index d94ddb6..c9be482 100644
--- a/app/views/measurements/_readouts.html.erb
+++ b/app/views/measurements/_readouts.html.erb
@@ -4,7 +4,9 @@
<% if @measurements.any? %>
<%= render partial: 'measurements/options' %>
- <%= error_messages_for @formula_q.formula, *@quantities.map { |q| q.formula } %>
+ <% formulas = @quantities.map { |q| q.formula } %>
+ <% formulas.unshift(@formula_q.formula) if @formula_q %>
+ <%= error_messages_for *formulas %>
diff --git a/lib/body_tracking/items_with_quantities.rb b/lib/body_tracking/items_with_quantities.rb
index cadf558..17c5a9e 100644
--- a/lib/body_tracking/items_with_quantities.rb
+++ b/lib/body_tracking/items_with_quantities.rb
@@ -50,14 +50,12 @@ module BodyTracking
subitem_reflection = item_class.reflections[subitem_type]
subitem_class = subitem_reflection.klass
subitems_scope = subitem_class.where(subitem_reflection.options[:inverse_of] => items)
- item_foreign_key = subitem_reflection.foreign_key
subitems = Hash.new { |h,k| h[k] = {} }
- subitems_scope.includes(:quantity, :unit)
- .order('quantities.lft')
- .pluck('quantities.id', item_foreign_key, VALUE_COLUMNS[item_class],
- 'units.shortname')
- .each { |q_id, item_id, a, u_id| subitems[q_id][item_id] = [a, u_id] }
- Quantity.find(subitems.keys).each { |q| subitems[q] = subitems.delete(q.id) }
+ subitems_scope.includes(:quantity, :unit).order('quantities.lft').each do |s|
+ item_id = s.send(subitem_reflection.foreign_key)
+ subitem_value = s.send(VALUE_COLUMNS[item_class])
+ subitems[s.quantity][item_id] = [subitem_value, s.unit]
+ end
extra_q = subitems.keys - requested_q