From 12c75edf10b6efe7b060f811d5c308badc931602 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 17:16:05 +0300 Subject: [PATCH 1/9] feature: display backtrace on unrelated form errors --- app/components/avo/alert_component.html.erb | 2 +- app/components/avo/alert_component.rb | 2 +- .../avo/backtrace_alert_component.html.erb | 26 +++++++++++++++++ .../avo/backtrace_alert_component.rb | 13 +++++++++ app/controllers/avo/base_controller.rb | 1 + .../base/create_fail_action.turbo_stream.erb | 20 +------------ .../base/update_fail_action.turbo_stream.erb | 20 +------------ app/views/avo/partials/_alerts.html.erb | 8 +----- app/views/avo/partials/_all_alerts.html.erb | 28 +++++++++++++++++++ lib/avo/configuration.rb | 4 +++ lib/avo/current.rb | 12 ++++++++ .../avo/templates/initializer/avo.tt | 2 ++ spec/dummy/app/models/course.rb | 5 ++++ spec/dummy/app/models/user.rb | 4 +++ spec/dummy/config/initializers/avo.rb | 2 ++ 15 files changed, 102 insertions(+), 47 deletions(-) create mode 100644 app/components/avo/backtrace_alert_component.html.erb create mode 100644 app/components/avo/backtrace_alert_component.rb create mode 100644 app/views/avo/partials/_all_alerts.html.erb diff --git a/app/components/avo/alert_component.html.erb b/app/components/avo/alert_component.html.erb index c712c13f65..6c945ad217 100644 --- a/app/components/avo/alert_component.html.erb +++ b/app/components/avo/alert_component.html.erb @@ -2,7 +2,7 @@ data-alert-dismiss-after-value="<%= Avo.configuration.alert_dismiss_time %>" data-alert-remove-delay-value="0" class="<%= classes %>" - > +>
diff --git a/app/components/avo/alert_component.rb b/app/components/avo/alert_component.rb index 1631254bbb..5cc507167d 100644 --- a/app/components/avo/alert_component.rb +++ b/app/components/avo/alert_component.rb @@ -12,7 +12,7 @@ def initialize(type, message) end def icon - return "heroicons/solid/x-circle" if is_error? + return "heroicons/solid/exclamation-circle" if is_error? return "heroicons/solid/exclamation" if is_warning? return "heroicons/solid/exclamation-circle" if is_info? return "heroicons/solid/check-circle" if is_success? diff --git a/app/components/avo/backtrace_alert_component.html.erb b/app/components/avo/backtrace_alert_component.html.erb new file mode 100644 index 0000000000..696be7677a --- /dev/null +++ b/app/components/avo/backtrace_alert_component.html.erb @@ -0,0 +1,26 @@ +
+
+
+
+ <%= helpers.svg "heroicons/solid/exclamation-circle", class: "h-6" %> +
+
+

+ Back trace: +

<%= @backtrace.join("\n") %>
+

+
+
+ +
+
+
+
diff --git a/app/components/avo/backtrace_alert_component.rb b/app/components/avo/backtrace_alert_component.rb new file mode 100644 index 0000000000..f190e98b49 --- /dev/null +++ b/app/components/avo/backtrace_alert_component.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Avo::BacktraceAlertComponent < ViewComponent::Base + include Avo::ApplicationHelper + + def initialize(backtrace: nil) + @backtrace = backtrace + end + + def render? + @backtrace.present? + end +end diff --git a/app/controllers/avo/base_controller.rb b/app/controllers/avo/base_controller.rb index e675fe8bc6..fd901971f2 100644 --- a/app/controllers/avo/base_controller.rb +++ b/app/controllers/avo/base_controller.rb @@ -224,6 +224,7 @@ def perform_action_and_record_errors(&block) # Example: When you save a license that should create a user for it and creating that user throws and error. # Example: When you Try to delete a record and has a foreign key constraint. exception_message = exception.message + @backtrace = exception.backtrace end # Add the errors from the record diff --git a/app/views/avo/base/create_fail_action.turbo_stream.erb b/app/views/avo/base/create_fail_action.turbo_stream.erb index 735b172e29..60490d61ce 100644 --- a/app/views/avo/base/create_fail_action.turbo_stream.erb +++ b/app/views/avo/base/create_fail_action.turbo_stream.erb @@ -1,21 +1,3 @@ <%= turbo_stream.replace(frame_id(@resource), template: "avo/base/new") %> -<%= turbo_stream.append "alerts" do %> - <%= render Avo::FlashAlertsComponent.new flashes: flash %> -<% end %> - -<% if @errors.any? %> - <%= turbo_stream.append("alerts") do %> - <% @errors.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> - <% end %> -<% end %> - -<% if @record.errors.any? %> - <%= turbo_stream.append("alerts") do %> - <% @record.errors.full_messages.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> - <% end %> -<% end %> +<%= render partial: "avo/partials/all_alerts" %> diff --git a/app/views/avo/base/update_fail_action.turbo_stream.erb b/app/views/avo/base/update_fail_action.turbo_stream.erb index 034047be81..f5419ea63c 100644 --- a/app/views/avo/base/update_fail_action.turbo_stream.erb +++ b/app/views/avo/base/update_fail_action.turbo_stream.erb @@ -1,21 +1,3 @@ <%= turbo_stream.replace(frame_id(@resource), template: "avo/base/edit") %> -<%= turbo_stream.append "alerts" do %> - <%= render Avo::FlashAlertsComponent.new flashes: flash %> -<% end %> - -<% if @errors.any? %> - <%= turbo_stream.append("alerts") do %> - <% @errors.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> - <% end %> -<% end %> - -<% if @record.errors.any? %> - <%= turbo_stream.append("alerts") do %> - <% @record.errors.full_messages.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> - <% end %> -<% end %> +<%= render partial: "avo/partials/all_alerts" %> diff --git a/app/views/avo/partials/_alerts.html.erb b/app/views/avo/partials/_alerts.html.erb index 8be38d1c28..d562c4e10d 100644 --- a/app/views/avo/partials/_alerts.html.erb +++ b/app/views/avo/partials/_alerts.html.erb @@ -1,9 +1,3 @@ <%= turbo_frame_tag :alerts, class: "fixed inset-0 bottom-0 flex flex-col space-y-4 items-end justify-right px-4 py-6 sm:p-6 justify-end z-[100] pointer-events-none" do %> - <%= render Avo::FlashAlertsComponent.new flashes: flash %> - <% # In case we have other general error messages %> - <% if @errors.present? %> - <% @errors.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> - <% end %> + <%= render partial: "avo/partials/all_alerts" %> <% end %> diff --git a/app/views/avo/partials/_all_alerts.html.erb b/app/views/avo/partials/_all_alerts.html.erb new file mode 100644 index 0000000000..64da67e44a --- /dev/null +++ b/app/views/avo/partials/_all_alerts.html.erb @@ -0,0 +1,28 @@ +<%= turbo_stream.append "alerts" do %> + <%= render Avo::FlashAlertsComponent.new flashes: flash %> +<% end %> + +<%# Print out stack traces if we have any %> +<% if @record&.errors&.any? %> + <%= turbo_stream.append("alerts") do %> + <% @record.errors.full_messages.each do |message| %> + <%= render Avo::AlertComponent.new :error, message %> + <% end %> + <% end %> +<% end %> + +<%# In case we have other general error messages %> +<% if @errors&.any? %> + <%= turbo_stream.append("alerts") do %> + <% @errors.each do |message| %> + <%= render Avo::AlertComponent.new :error, message %> + <% end %> + <% end %> +<% end %> + +<%# In case we have a backtrace from an error %> +<% if @backtrace&.present? && Avo::Current.user_is_developer? %> + <%= turbo_stream.append("alerts") do %> + <%= render Avo::BacktraceAlertComponent.new backtrace: @backtrace %> + <% end %> +<% end %> diff --git a/lib/avo/configuration.rb b/lib/avo/configuration.rb index 46264e1238..7307986cb8 100644 --- a/lib/avo/configuration.rb +++ b/lib/avo/configuration.rb @@ -50,6 +50,8 @@ class Configuration attr_accessor :mount_avo_engines attr_accessor :default_url_options attr_accessor :alert_dismiss_time + attr_accessor :is_admin_method + attr_accessor :is_developer_method def initialize @root_path = "/avo" @@ -107,6 +109,8 @@ def initialize @default_url_options = [] @pagination = {} @alert_dismiss_time = 5000 + @is_admin_method = :is_admin? + @is_developer_method = :is_developer? end def current_user_method(&block) diff --git a/lib/avo/current.rb b/lib/avo/current.rb index 4ecd87b56f..136f6fcf6b 100644 --- a/lib/avo/current.rb +++ b/lib/avo/current.rb @@ -24,4 +24,16 @@ def params def request view_context&.request || ActionDispatch::Request.empty end + + def user_is_admin? + return false unless user && user.respond_to?(Avo.configuration.is_admin_method) + + user.send(Avo.configuration.is_admin_method) + end + + def user_is_developer? + return false unless user && user.respond_to?(Avo.configuration.is_developer_method) + + user.send(Avo.configuration.is_developer_method) + end end diff --git a/lib/generators/avo/templates/initializer/avo.tt b/lib/generators/avo/templates/initializer/avo.tt index a779c1aecf..945b21b064 100644 --- a/lib/generators/avo/templates/initializer/avo.tt +++ b/lib/generators/avo/templates/initializer/avo.tt @@ -23,6 +23,8 @@ Avo.configure do |config| ## == Authentication == # config.current_user_method = {} + # config.is_admin_method = :is_admin + # config.is_developer_method = :is_developer # config.authenticate_with do # end diff --git a/spec/dummy/app/models/course.rb b/spec/dummy/app/models/course.rb index 00f38305f2..c9c4b7f91f 100644 --- a/spec/dummy/app/models/course.rb +++ b/spec/dummy/app/models/course.rb @@ -20,6 +20,11 @@ class Course < ApplicationRecord validates :name, presence: true + # Used to test the backtrace alert + after_save do + raise "hehe" if ENV['TEST_BACKTRACE_ALERT'] == '1' + end + def has_skills true end diff --git a/spec/dummy/app/models/user.rb b/spec/dummy/app/models/user.rb index ac3b9a2ff2..ed46e707cf 100644 --- a/spec/dummy/app/models/user.rb +++ b/spec/dummy/app/models/user.rb @@ -84,4 +84,8 @@ def self.ransackable_attributes(auth_object = nil) def accounts [OpenStruct.new(id: 1, name: "Foo"), OpenStruct.new(id: 2, name: "Bar")] end + + def is_developer? + true + end end diff --git a/spec/dummy/config/initializers/avo.rb b/spec/dummy/config/initializers/avo.rb index f0270dfa05..33ad89ca32 100644 --- a/spec/dummy/config/initializers/avo.rb +++ b/spec/dummy/config/initializers/avo.rb @@ -17,6 +17,8 @@ ## == App context == config.current_user_method = :current_user + # config.is_admin_method = :is_admin? + # config.is_developer_method = :is_developer? config.model_resource_mapping = { User: "User" } From 2b5079bfd27260acc29b4324ad450bd8c8464691 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 17:29:56 +0300 Subject: [PATCH 2/9] wip --- .../avo/backtrace_alert_component.html.erb | 2 +- spec/dummy/app/models/course.rb | 3 ++- spec/system/avo/alert_backtrace_spec.rb | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 spec/system/avo/alert_backtrace_spec.rb diff --git a/app/components/avo/backtrace_alert_component.html.erb b/app/components/avo/backtrace_alert_component.html.erb index 696be7677a..debaf26be7 100644 --- a/app/components/avo/backtrace_alert_component.html.erb +++ b/app/components/avo/backtrace_alert_component.html.erb @@ -10,7 +10,7 @@

- Back trace: + Backtrace:

<%= @backtrace.join("\n") %>

diff --git a/spec/dummy/app/models/course.rb b/spec/dummy/app/models/course.rb index c9c4b7f91f..0c53de7946 100644 --- a/spec/dummy/app/models/course.rb +++ b/spec/dummy/app/models/course.rb @@ -22,7 +22,8 @@ class Course < ApplicationRecord # Used to test the backtrace alert after_save do - raise "hehe" if ENV['TEST_BACKTRACE_ALERT'] == '1' + raise "raised" if ENV['TEST_BACKTRACE_ALERT'] == "1" + # raise "raised" end def has_skills diff --git a/spec/system/avo/alert_backtrace_spec.rb b/spec/system/avo/alert_backtrace_spec.rb new file mode 100644 index 0000000000..eea1b01dca --- /dev/null +++ b/spec/system/avo/alert_backtrace_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe "Alert Backtrace", type: :system do + before do + ENV['TEST_BACKTRACE_ALERT'] = '1' + end + + it "responds with a backtrace alert" do + visit "/admin/resources/courses/new" + + fill_in "Name", with: "Test" + + save + + expect(page).to have_text "raised" + expect(page).to have_text "Backtrace:" + expect(page).to have_text "/dummy/app/models/course.rb:25:in `block in '" + end +end From 0e226a41b2f2e5580a6d6e46d7c1a69ab36af9fd Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 17:32:12 +0300 Subject: [PATCH 3/9] wip --- lib/avo/current.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/avo/current.rb b/lib/avo/current.rb index 136f6fcf6b..9baf2da9ac 100644 --- a/lib/avo/current.rb +++ b/lib/avo/current.rb @@ -26,13 +26,13 @@ def request end def user_is_admin? - return false unless user && user.respond_to?(Avo.configuration.is_admin_method) + return false unless user&.respond_to?(Avo.configuration.is_admin_method) user.send(Avo.configuration.is_admin_method) end def user_is_developer? - return false unless user && user.respond_to?(Avo.configuration.is_developer_method) + return false unless user&.respond_to?(Avo.configuration.is_developer_method) user.send(Avo.configuration.is_developer_method) end From 10da835598b9f8226e4d8e18b5ac57aac3ced1d3 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 17:52:27 +0300 Subject: [PATCH 4/9] fix error duplication --- app/controllers/avo/base_controller.rb | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/app/controllers/avo/base_controller.rb b/app/controllers/avo/base_controller.rb index fd901971f2..d1ab994568 100644 --- a/app/controllers/avo/base_controller.rb +++ b/app/controllers/avo/base_controller.rb @@ -219,31 +219,20 @@ def destroy_record_action def perform_action_and_record_errors(&block) begin succeeded = block.call + rescue ActiveRecord::RecordInvalid + # Do nothing as the record errors are already being displayed rescue => exception # In case there's an error somewhere else than the record # Example: When you save a license that should create a user for it and creating that user throws and error. # Example: When you Try to delete a record and has a foreign key constraint. + # puts ["exception.class->", exception.class].inspect exception_message = exception.message @backtrace = exception.backtrace end - # Add the errors from the record - @errors = @record.errors.full_messages + @errors = [] - # Remove duplicated errors - if exception_message.present? - @errors = @errors.reject { |error| exception_message.include? error } - end - - # Figure out if we have to output the exception_message - # Usually it means that it's not a validation error but something else - if exception_message.present? - exception_is_validation = @errors.select { |error| exception_message.include? error }.present? - end - - if exception_is_validation || (@errors.blank? && exception_message.present?) - @errors << exception_message - end + @errors << exception_message if exception_message.present? @errors.any? ? false : succeeded end From 223cf731056a5ef2b2a723106475d78625f0b846 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 17:52:55 +0300 Subject: [PATCH 5/9] lint --- spec/dummy/app/models/course.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/dummy/app/models/course.rb b/spec/dummy/app/models/course.rb index 918047a403..fb1a6bf687 100644 --- a/spec/dummy/app/models/course.rb +++ b/spec/dummy/app/models/course.rb @@ -22,7 +22,7 @@ class Course < ApplicationRecord # Used to test the backtrace alert after_save do - raise "raised" if ENV['TEST_BACKTRACE_ALERT'] == "1" + raise "raised" if ENV["TEST_BACKTRACE_ALERT"] == "1" # raise "raised" end From 911a47a5e101146e9777b724c95c0afcb17dac45 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 18:06:20 +0300 Subject: [PATCH 6/9] lint --- spec/system/avo/alert_backtrace_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/system/avo/alert_backtrace_spec.rb b/spec/system/avo/alert_backtrace_spec.rb index eea1b01dca..c4f8d4e115 100644 --- a/spec/system/avo/alert_backtrace_spec.rb +++ b/spec/system/avo/alert_backtrace_spec.rb @@ -1,8 +1,8 @@ -require 'rails_helper' +require "rails_helper" RSpec.describe "Alert Backtrace", type: :system do before do - ENV['TEST_BACKTRACE_ALERT'] = '1' + ENV["TEST_BACKTRACE_ALERT"] = "1" end it "responds with a backtrace alert" do @@ -14,6 +14,6 @@ expect(page).to have_text "raised" expect(page).to have_text "Backtrace:" - expect(page).to have_text "/dummy/app/models/course.rb:25:in `block in '" + expect(page).to have_text "/dummy/app/models/course.rb:25:in `block in "" end end From ab5f37da4d111033ab632d934b57ad5701fcb8ba Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 18:32:20 +0300 Subject: [PATCH 7/9] refactor alerts --- .../base/create_fail_action.turbo_stream.erb | 4 +++- .../base/update_fail_action.turbo_stream.erb | 4 +++- app/views/avo/partials/_all_alerts.html.erb | 23 +++++-------------- spec/dummy/app/avo/resources/post.rb | 2 +- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/app/views/avo/base/create_fail_action.turbo_stream.erb b/app/views/avo/base/create_fail_action.turbo_stream.erb index 60490d61ce..bdc0dbb3a9 100644 --- a/app/views/avo/base/create_fail_action.turbo_stream.erb +++ b/app/views/avo/base/create_fail_action.turbo_stream.erb @@ -1,3 +1,5 @@ <%= turbo_stream.replace(frame_id(@resource), template: "avo/base/new") %> -<%= render partial: "avo/partials/all_alerts" %> +<%= turbo_stream.append "alerts" do %> + <%= render partial: "avo/partials/all_alerts" %> +<% end %> diff --git a/app/views/avo/base/update_fail_action.turbo_stream.erb b/app/views/avo/base/update_fail_action.turbo_stream.erb index f5419ea63c..40f6b6bb1a 100644 --- a/app/views/avo/base/update_fail_action.turbo_stream.erb +++ b/app/views/avo/base/update_fail_action.turbo_stream.erb @@ -1,3 +1,5 @@ <%= turbo_stream.replace(frame_id(@resource), template: "avo/base/edit") %> -<%= render partial: "avo/partials/all_alerts" %> +<%= turbo_stream.append "alerts" do %> + <%= render partial: "avo/partials/all_alerts" %> +<% end %> diff --git a/app/views/avo/partials/_all_alerts.html.erb b/app/views/avo/partials/_all_alerts.html.erb index 64da67e44a..e449e645f4 100644 --- a/app/views/avo/partials/_all_alerts.html.erb +++ b/app/views/avo/partials/_all_alerts.html.erb @@ -1,28 +1,17 @@ -<%= turbo_stream.append "alerts" do %> - <%= render Avo::FlashAlertsComponent.new flashes: flash %> -<% end %> +<%= render Avo::FlashAlertsComponent.new flashes: flash %> -<%# Print out stack traces if we have any %> <% if @record&.errors&.any? %> - <%= turbo_stream.append("alerts") do %> - <% @record.errors.full_messages.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> + <% @record.errors.full_messages.each do |message| %> + <%= render Avo::AlertComponent.new :error, message %> <% end %> <% end %> -<%# In case we have other general error messages %> <% if @errors&.any? %> - <%= turbo_stream.append("alerts") do %> - <% @errors.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> + <% @errors.each do |message| %> + <%= render Avo::AlertComponent.new :error, message %> <% end %> <% end %> -<%# In case we have a backtrace from an error %> <% if @backtrace&.present? && Avo::Current.user_is_developer? %> - <%= turbo_stream.append("alerts") do %> - <%= render Avo::BacktraceAlertComponent.new backtrace: @backtrace %> - <% end %> + <%= render Avo::BacktraceAlertComponent.new backtrace: @backtrace %> <% end %> diff --git a/spec/dummy/app/avo/resources/post.rb b/spec/dummy/app/avo/resources/post.rb index c1cdc62ef4..b74a70e5ae 100644 --- a/spec/dummy/app/avo/resources/post.rb +++ b/spec/dummy/app/avo/resources/post.rb @@ -70,7 +70,7 @@ def fields { cover_url: if record.cover_photo.attached? - main_app.url_for(record.cover_photo.url) + main_app.url_for(record.cover_photo) end, title: record.name, body: helpers.extract_excerpt(record.body) From 32e7d89d307906a668c616548264a5415cbb6b22 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 18:33:00 +0300 Subject: [PATCH 8/9] fix test --- spec/system/avo/alert_backtrace_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/system/avo/alert_backtrace_spec.rb b/spec/system/avo/alert_backtrace_spec.rb index c4f8d4e115..cb143112ff 100644 --- a/spec/system/avo/alert_backtrace_spec.rb +++ b/spec/system/avo/alert_backtrace_spec.rb @@ -14,6 +14,6 @@ expect(page).to have_text "raised" expect(page).to have_text "Backtrace:" - expect(page).to have_text "/dummy/app/models/course.rb:25:in `block in "" + expect(page).to have_text "/dummy/app/models/course.rb:25:in `block in " end end From 03f235c549cd8b5337f7bc9f41210ed09dccadd3 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Fri, 28 Jun 2024 21:59:41 +0300 Subject: [PATCH 9/9] wip --- app/controllers/avo/base_controller.rb | 15 ++++++--------- app/views/avo/partials/_all_alerts.html.erb | 6 ------ 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/app/controllers/avo/base_controller.rb b/app/controllers/avo/base_controller.rb index d1ab994568..8b7da8fea2 100644 --- a/app/controllers/avo/base_controller.rb +++ b/app/controllers/avo/base_controller.rb @@ -219,22 +219,18 @@ def destroy_record_action def perform_action_and_record_errors(&block) begin succeeded = block.call - rescue ActiveRecord::RecordInvalid + rescue ActiveRecord::RecordInvalid => e # Do nothing as the record errors are already being displayed rescue => exception # In case there's an error somewhere else than the record # Example: When you save a license that should create a user for it and creating that user throws and error. # Example: When you Try to delete a record and has a foreign key constraint. - # puts ["exception.class->", exception.class].inspect - exception_message = exception.message + @record.errors.add(:base, exception.message) @backtrace = exception.backtrace end - @errors = [] - - @errors << exception_message if exception_message.present? - - @errors.any? ? false : succeeded + # This method only needs to return true or false to indicate if the action was successful + @record.errors.any? ? false : succeeded end def model_params @@ -523,7 +519,8 @@ def destroy_success_message end def destroy_fail_message - @errors.present? ? @errors.join(". ") : t("avo.failed") + errors = @record.errors.full_messages + errors.present? ? errors.join(". ") : t("avo.failed") end def after_destroy_path diff --git a/app/views/avo/partials/_all_alerts.html.erb b/app/views/avo/partials/_all_alerts.html.erb index e449e645f4..fb3abe9ca6 100644 --- a/app/views/avo/partials/_all_alerts.html.erb +++ b/app/views/avo/partials/_all_alerts.html.erb @@ -6,12 +6,6 @@ <% end %> <% end %> -<% if @errors&.any? %> - <% @errors.each do |message| %> - <%= render Avo::AlertComponent.new :error, message %> - <% end %> -<% end %> - <% if @backtrace&.present? && Avo::Current.user_is_developer? %> <%= render Avo::BacktraceAlertComponent.new backtrace: @backtrace %> <% end %>