Skip to content

Commit

Permalink
feat: refactor page redirect target path
Browse files Browse the repository at this point in the history
this will make us easier to override redirect path

fix syntax

fix hound

restore unchanged lines

fix hound review

Update application_controller.rb

fix hound review

Add specs and doc for override redirect feature

Update docs/customizing_controller_actions.md

Co-authored-by: Pablo Brasero <36066+pablobm@users.noreply.github.com>

use anonimous controller for custom redirect
  • Loading branch information
saiqulhaq authored and edimossilva committed Jun 10, 2021
1 parent d82bf26 commit c3c0568
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 4 deletions.
18 changes: 15 additions & 3 deletions app/controllers/administrate/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def create

if resource.save
redirect_to(
[namespace, resource],
after_resource_created_path(resource),
notice: translate_with_resource("create.success"),
)
else
Expand All @@ -60,7 +60,7 @@ def create
def update
if requested_resource.update(resource_params)
redirect_to(
[namespace, requested_resource],
after_resource_updated_path(requested_resource),
notice: translate_with_resource("update.success"),
)
else
Expand All @@ -76,11 +76,23 @@ def destroy
else
flash[:error] = requested_resource.errors.full_messages.join("<br/>")
end
redirect_to action: :index
redirect_to after_resource_destroyed_path(requested_resource)
end

private

def after_resource_destroyed_path(_requested_resource)
{ action: :index }
end

def after_resource_created_path(requested_resource)
[namespace, requested_resource]
end

def after_resource_updated_path(requested_resource)
[namespace, requested_resource]
end

helper_method :nav_link_state
def nav_link_state(resource)
resource_name.to_s.pluralize == resource.to_s ? :active : :inactive
Expand Down
20 changes: 19 additions & 1 deletion docs/customizing_controller_actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,22 @@ end
def default_sorting_direction
:desc
end
```
```

## Customizing Redirects after actions

To set custom redirects after the actions `create`, `update` and `destroy` you can override `after_resource_created_path`, `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
```
41 changes: 41 additions & 0 deletions spec/controllers/admin/application_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require "rails_helper"

RSpec.describe Admin::OrdersController, type: :controller do
controller(Admin::OrdersController) do
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

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

0 comments on commit c3c0568

Please sign in to comment.