From 554e6afcf46743b97f9046de8f8219e9be479402 Mon Sep 17 00:00:00 2001 From: Edimo Sousa Date: Thu, 3 Jun 2021 19:11:27 +0300 Subject: [PATCH] Add specs and doc for override redirect feature --- .../administrate/application_controller.rb | 5 +-- docs/customizing_controller_actions.md | 20 ++++++++- .../admin/application_controller_spec.rb | 43 +++++++++++++++++++ 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 spec/controllers/admin/application_controller_spec.rb diff --git a/app/controllers/administrate/application_controller.rb b/app/controllers/administrate/application_controller.rb index a183594a4a..afae05335b 100644 --- a/app/controllers/administrate/application_controller.rb +++ b/app/controllers/administrate/application_controller.rb @@ -85,8 +85,8 @@ def after_resource_destroyed_path(_requested_resource) { action: :index } end - def after_resource_created_path(resource) - [namespace, resource] + def after_resource_created_path(requested_resource) + [namespace, requested_resource] end def after_resource_updated_path(requested_resource) @@ -158,7 +158,6 @@ def scoped_resource def apply_collection_includes(relation) resource_includes = dashboard.collection_includes return relation if resource_includes.empty? - relation.includes(*resource_includes) end diff --git a/docs/customizing_controller_actions.md b/docs/customizing_controller_actions.md index 46fdfb87d3..ecbe819f94 100644 --- a/docs/customizing_controller_actions.md +++ b/docs/customizing_controller_actions.md @@ -69,4 +69,22 @@ end def default_sorting_direction :desc end -``` \ No newline at end of file +``` + +## Customizing Redirects after actions + +To change redirect after the actions `create`, `update` and `destroy` you could override `after_resource_created_path` or `after_resource_updated_path` or `after_resource_destroyed_path` like this + +```ruby + def after_resource_destroyed_path(_requested_resource) + { action: :index, controller: :some_other_resource } + end + + def after_resource_created_path(requested_resource) + [namespace, requested_resource.some_other_resource] + end + + def after_resource_updated_path(requested_resource) + [namespace, requested_resource.some_other_resource] + end +``` diff --git a/spec/controllers/admin/application_controller_spec.rb b/spec/controllers/admin/application_controller_spec.rb new file mode 100644 index 0000000000..76dc8d3e51 --- /dev/null +++ b/spec/controllers/admin/application_controller_spec.rb @@ -0,0 +1,43 @@ +require "rails_helper" + +module Admin + class OrdersController < Admin::ApplicationController + def after_resource_destroyed_path(_requested_resource) + { action: :index, controller: :customers } + end + + def after_resource_created_path(requested_resource) + [namespace, requested_resource.customer] + end + + def after_resource_updated_path(requested_resource) + [namespace, requested_resource.customer] + end + end +end + +RSpec.describe Admin::OrdersController, type: :controller do + it "redirect to custom route after destroy" do + order = create(:order) + + delete :destroy, id: order.to_param + expect(response).to redirect_to(admin_customers_path) + end + + it "redirect to custom route after create" do + customer = create(:customer) + order_attributes = build(:order, customer: customer).attributes + params = order_attributes.except("id", "created_at", "updated_at", "shipped_at") + + post :create, order: params + expect(response).to redirect_to(admin_customer_path(customer)) + end + + it "redirect to custom route after update" do + order = create(:order) + order_params = { address_line_one: order.address_line_one } + + put :update, id: order.to_param, order: order_params + expect(response).to redirect_to(admin_customer_path(order.customer)) + end +end