diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 82ea9ec1e..f039e2d56 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -26,7 +26,7 @@ class CaseLogsController < ApplicationController previous_page = params[:case_log][:previous_page] questions_for_page = form.questions_for_page(previous_page) responses_for_page = question_responses(questions_for_page) - + @case_log.previous_page = previous_page if @case_log.update(responses_for_page) redirect_path = form.next_page_redirect_path(previous_page) redirect_to(send(redirect_path, @case_log)) @@ -45,7 +45,7 @@ class CaseLogsController < ApplicationController form = Form.new(2021, 2022) form.all_pages.map do |page_key, page_info| - define_method(page_key) do + define_method(page_key) do |_errors = {}| @case_log = CaseLog.find(params[:case_log_id]) render "form/page", locals: { form: form, page_key: page_key, page_info: page_info } end diff --git a/app/models/case_log.rb b/app/models/case_log.rb index c05ed887b..aa17eddf6 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -1,5 +1,37 @@ +class CaseLogValidator < ActiveModel::Validator + # Methods need to be named 'validate_' followed by field name + # this is how the metaprogramming of the method name being + # call in the validate method works. + + def validate_tenant_code(record) + if record.tenant_code.blank? + record.errors.add :tenant_code, "Tenant code can't be blank" + end + end + + def validate_tenant_age(record) + if record.tenant_age.blank? + record.errors.add :tenant_age, "Tenant age can't be blank" + elsif !/^[1-9][0-9]?$|^100$/.match?(record.tenant_age.to_s) + record.errors.add :tenant_age, "Tenant age must be between 0 and 100" + end + end + + def validate(record) + question_to_validate = options[:previous_page] + if respond_to?("validate_#{question_to_validate}") + public_send("validate_#{question_to_validate}", record) + end + end +end + class CaseLog < ApplicationRecord + validate :instance_validations + attr_writer :previous_page + enum status: { "in progress" => 0, "submitted" => 1 } - # validates :tenant_age, presence: true + def instance_validations + validates_with CaseLogValidator, ({ previous_page: @previous_page } || {}) + end end diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 64123b540..2d6619dd5 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -6,6 +6,7 @@ <% end %> <%= turbo_frame_tag "case_log_form", target: "_top" do %> + <% if page_info["header"].present? %>