All threads / Devise redirects to /users when there is an error editing profile

Ask A Question

Notifications

You’re not receiving notifications from this thread.

Devise redirects to /users when there is an error editing profile

Alan Reid asked in Gems / Libraries

I would like to know how i can change the redirect path so that when my editing a user fails it redirects back to users/edit and not to /users.

To replicate this i am entering a duplicate email address, entering the password. When my app checks the email it comes back as failed. You will see the page is localhost:3000/users

Any help or advise would be much appreciated thanks :D

Alan

I would actually recommend not trying to modify this because that's how Rails generally works. The thing is that your form submits a PUT request to /users when you edit your user, so when it fails, the request returns HTML and that's why your browser ends up on /users instead of /users/edit. Since it doesn't do a redirect in order to preserve all the variables, it has to keep the URL on /users in order to generate the next page that includes the errors on it.

For you to modify that, you'd be going against the way the routes work in Rails and so your solution would be kind of hacky. This does tend to feel a little weird in development when you're testing things, but when the app is live, you'll never notice it because you won't be typing in URLs direct hardly ever.

Does that make sense?

Hi Chris,
My issue here is that I have a separate layout for the login, password reset and sign up etc. So when this errors its send me to a get on the /users page so shows my other layout haha. I need to work a way around that i think

Oh I gotcha, that should be much simpler.

I believe you'll need to override the Devise Registrations controller and just define the layouts in those methods.

# config/routes.rb
devise :users, controllers: { registrations: "users/registrations" }
# app/controllers/users/registrations_controller.rb
class Users::RegistrationController < Devise::RegistrationsController
    layout "new_registration", only: [:new, :create]
    layout "edit_registration", only: [:edit, :update]
end

Something like that should do the trick.

cheers buddy, i will look at that. I reckon thats all i needed.

You know when you look at things for so long you just miss the obvious haha

I know the feeling all too well. :)

It's all good, though, with this site I am picking up so much I am impressed with what I have made so far, and that's just the user stuff lol

Join the discussion

Want to stay up-to-date with Ruby on Rails?

Join 37,629+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

    © 2020 GoRails, LLC. All rights reserved.