简体   繁体   中英

Devise Error Messages and Routings Rails 4

I have an edit page that comes with devise. To use it in my app i need to render a special layout and that layout should be rendered only in edit page. So inorder to override i wrote edit method.. here is my registration_controller.rb

def edit
    session[:tab] = "Edit Profile"
    render layout: 'calculator'
  end

  def update

    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
    p '----------------'

    resource_updated = update_resource(resource, account_update_params)
    yield resource if block_given?
    if resource_updated
      if is_flashing_format?
        flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
          :update_needs_confirmation : :updated
        set_flash_message :notice, flash_key
      end
      sign_in resource_name, resource, bypass: true
      respond_with resource, location: after_update_path_for(resource)
    else
      clean_up_passwords resource
      redirect to '/users/edit'
    end
  end

Thing is if I enter wrong password an error occurs and the rendering fails. So i thought of redirecting to edit url in my update function. Thing is i want to show the error messages too when it redirects to edit page.

Or is there any easy way to do this. I want to render a layout in edit page which wont break when an error occurs while updating(like password mismatch)

Flash

Having read up on this question about redirecting with flash , it seems that using redirect_to does not maintain the flash keys you set in your controller

To fix this, you can use flash.keep :

def update
  ...
  else
     flash.keep #-> added
     ...
     redirect to '/users/edit'
  end
end

System

Your system looks very inefficient to me - I know you've duplicated the file devise uses, but it's still bloated.

Also you're using puts in your controller? No! You should only output data in your views !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM