two or more render/redirect in the same method I often have method like this one with two or more render to do due to catching the error for example.
I currently do something like this:

def update
  @user = current_user
  if params[:user][:camera_type].present? &amp;&amp; params[:user][:lens_type].present? &amp;&amp; params[:user][:photo].present?
    r = Photo.instance.Upload(camera_type: @user.id,
                              album: @user.default_album,
                              photo: params[:user][:photo],
                              lens_type: params[:user][:lens_type],
                              camera_type: params[:user][:camera_type])
    @user.camera_type = params[:user][:camera_type]
    @user.lens_type = params[:user][:lens_type]
    @user.photo = params[:user][:photo]
    @user.save!
    render action: 'edit'
    return
  end
rescue Photo =&gt; e
  redirect_to photo_path, :flash =&gt; { :alert =&gt; t(:text_photo_edit_failed) }
end


But may be there is a better way to do it ?
Some notes:


Keep your controllers lean, this is too much code for an action. 
The photo upload should be done as a part of the object's save chain (after validation), so create a before_save callback in the User model that returns false if the upload fails. 
You set r (cryptic name) but don't use it anywhere? does the upload raise an exception on error?


At the end the controller should look extremely simple, something like:

def update
  @user = current_user

  if @user.update_attributes(params[:user])
    render action: 'edit'
  else
    redirect_to photo_path, flash: {alert: t(:text_photo_edit_failed)}
  end
end


Any additional logic should be in User. Models are easy to test in isolation, controllers on the other hand have a lot of state to worry about.