1
0

compute_quantities now returns single hash

Fixed MeasurementsController view management
This commit is contained in:
cryptogopher
2020-04-26 20:21:17 +02:00
parent 9f5f31ca42
commit 4230d72206
27 changed files with 118 additions and 108 deletions

View File

@@ -24,15 +24,9 @@ module Concerns::Finders
def find_measurement
@measurement = Measurement.find(params[:id])
@routine = @measurement.routine
@project = @routine.project
rescue ActiveRecord::RecordNotFound
render_404
end
def find_measurement_routine
@routine = MeasurementRoutine.find(params[:id])
@project = @routine.project
# DON'T set @routine here: @routine is a context for :readouts view (set
# elsewhere), not a # @measurement.routine
@project = @measurement.routine.project
rescue ActiveRecord::RecordNotFound
render_404
end
@@ -44,6 +38,10 @@ module Concerns::Finders
render_404
end
def find_measurement_routine_by_measurement_routine_id
find_measurement_routine(params[:measurement_routine_id])
end
def find_quantity(id = params[:id])
@quantity = Quantity.find(id)
@project = @quantity.project

View File

@@ -209,14 +209,12 @@ class FoodsController < ApplicationController
end
def prepare_foods
@foods, @filter_q = @project.foods
.includes(:ref_unit, :source)
@foods, @filter_q = @project.foods.includes(:ref_unit, :source)
.filter(session[:f_filters])
end
def prepare_nutrients
@quantities = @project.nutrient_quantities.includes(:formula)
@foods, @requested_n, @extra_n, @filter_q = @project.foods
.filter(session[:f_filters], @quantities)
@foods, @filter_q = @project.foods.filter(session[:f_filters], @quantities)
end
end

View File

@@ -82,6 +82,6 @@ class MealsController < ApplicationController
def prepare_meals
@quantities = @project.meal_quantities.includes(:formula)
@foods, @requested_n, * = @project.meal_foods.compute_quantities(@quantities)
@foods = @project.meal_foods.compute_quantities(@quantities)
end
end

View File

@@ -9,8 +9,13 @@ class MeasurementsController < ApplicationController
before_action :find_project_by_project_id, only: [:index, :new, :create, :filter]
before_action :find_quantity_by_quantity_id, only: [:toggle_exposure]
before_action :find_measurement, only: [:edit, :update, :destroy, :retake]
# @routine is set for :readouts view ONLY
before_action :find_measurement_routine, only: [:readouts, :toggle_exposure]
before_action :find_measurement_routine_by_measurement_routine_id,
only: [:new, :create, :edit, :update, :retake, :filter],
if: -> { params[:view] == 'readouts' }
before_action :authorize
before_action :set_view_params
def index
prepare_measurements
@@ -18,7 +23,7 @@ class MeasurementsController < ApplicationController
def new
@measurement = @project.measurements.new
@routine = @measurement.build_routine
@measurement.build_routine
@measurement.readouts.new
end
@@ -31,10 +36,10 @@ class MeasurementsController < ApplicationController
update_routine_from_params
@measurement.attributes = measurement_params
@measurement.routine.project = @project
@routine = @measurement.routine
if @measurement.save
if @routine.readout_exposures.empty?
@routine.quantities << @measurement.readouts.map(&:quantity).first(6)
routine = @measurement.routine
if routine.readout_exposures.empty?
routine.quantities << @measurement.readouts.map(&:quantity).first(6)
end
flash[:notice] = 'Created new measurement'
@@ -52,7 +57,7 @@ class MeasurementsController < ApplicationController
update_routine_from_params
if @measurement.update(measurement_params)
flash[:notice] = 'Updated measurement'
if @measurement.routine.previous_changes.has_key?(:name) && params[:view] == 'readouts'
if @measurement.routine.previous_changes.has_key?(:name) && @routine
render js: "window.location.pathname='#{readouts_measurement_routine_path(@routine)}'"
else
prepare_items
@@ -126,19 +131,26 @@ class MeasurementsController < ApplicationController
end
def prepare_items
params[:view] == 'index' ? prepare_measurements : prepare_readouts
@routine ? prepare_readouts : prepare_measurements
end
def prepare_measurements
@measurements, @filter_q = @project.measurements
.includes(:routine, :source, :readouts)
@measurements, @filter_q = @project.measurements.includes(:routine, :source, :readouts)
.filter(session[:m_filters])
end
def prepare_readouts
@quantities = @routine.quantities.includes(:formula)
@measurements, @requested_r, @extra_r, @filter_q = @routine.measurements
.includes(:routine, :source)
@measurements, @filter_q = @routine.measurements.includes(:routine, :source)
.filter(session[:m_filters], @quantities)
end
def set_view_params
@view_params =
if @routine
{view: :readouts, measurement_routine_id: @routine.id}
else
{view: :index}
end
end
end