2017-08-31 2 views
0

J'essaie de permettre la mise à jour du compte utilisateur de concevoir sans que le mot de passe ne doive être changé chaque fois que vous changez un compte d'utilisateur. Pour ce faire, il faut que je change la méthode update_resource mais je reçois un DoubleRenderErrror et je ne suis pas sûr de savoir comment résoudre ce problème.Obtenir DoubleRenderError en faisant `update_resource` pour concevoir dans ActiveAdmin

Voici mon code tel qu'il est:

controller do 
    protected 
    def update_resource(resource, params) 
     if params.first[:password].blank? 
     resource.update_without_password(params.first) 
     else 
     resource.update_attributes(params.first) 
     end 
     if resource.errors.blank? 
     redirect_to admin_users_path, :notice => "User updated successfully." 
     else 
     render :edit 
     end 
    end 
    end 

Répondre

1

essayez de remplacer le code existant redirect_to admin_users_path, :notice => "User updated successfully." avec return redirect_to admin_users_path, :notice => "User updated successfully.". J'espère que cela aidera.

+0

Pas de dés :(, mais merci de toute façon – Thermatix

+0

Vous pouvez trouver une solution à un problème similaire ici aussi [link_here] (https://stackoverflow.com/questions/21610090/double-render-error-rails) –

+0

Je suis content que vous ayez trouvé la solution :) –

0

Mon erreur a été de penser la méthode update_resource je primordiale était une dérogation lui-même pour la méthode update quand ce n'est pas, en conséquence, il a été exécuté mon remplacement, en cours d'exécution alors la méthode update ainsi rendu/redirigeant deux fois. La suppression de toutes les tâches de rendu/redirect_to a permis de résoudre le problème.

Je réalise mon erreur après avoir vu this issue sur GitHub, en particulier cet extrait de code:

def update_resource(object, attributes) 
    puts "==================before update=====================" 
    debugger 
    object.update_attributes(*attributes) 
    puts "=================after update=====================" 
end  
def update(options={}, &block) 
    super do |success, failure| 
    block.call(success, failure) if block 
    failure.html { render :edit } 
    end 
end 

comme vous pouvez le voir, la méthode de mise à jour et les méthodes de update_resource sont des méthodes distinctes.