2016-03-03 1 views
0

J'utilise ce contrôleur 3ème partie:Rails - Intercept respond_with

class LibController 

     def update 
     # 29 lines of code 
     respond_with resource 
     end 

    end 

Je veux faire autre chose que la respond_with à la fin. Mais je ne veux pas simplement copier/coller toutes les 29 lignes dans MyController.update. Malheureusement, je ne peux pas trouver un moyen de rendre ou redirigent nulle part ailleurs:

class MyController < LibController 

    def update 
     super 
     redirect_to somewhere_else 
    end 

    end 

je reçois un DoubleRenderError: Render and/or redirect were called multiple times in this action. Je suppose que c'est parce que respond_with appelle immédiatement render. Y a-t-il un moyen de bloquer/empêcher cela?

Merci!

Répondre

0

Je pense que vous faites une double redirection. Tenter d'enlever une redirection sur votre mettre à jour la méthode.

Vérifiez le code d'exemple ci-dessous qui affiche une réponse équivalente lorsque vous utilisez respond_with.

def create 
    @user = User.new(params[:user]) 
    flash[:notice] = 'User was successfully created.' if @user.save 
    respond_with(@user) 
end 

Quelle est exactement la même que:

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     flash[:notice] = 'User was successfully created.' 
     format.html { redirect_to(@user) } 
     format.xml { render xml: @user, status: :created, location: @user } 
    else 
     format.html { render action: "new" } 
     format.xml { render xml: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 
+0

Merci aldrien. Je me demande si ma seule option est de copier/coller la méthode entière à partir de la méthode 3rd party, juste pour remplacer cette dernière ligne. – Matt

+0

Je pense que vous avez juste besoin d'utiliser la redirection dans la méthode Controller, et essayez de supprimer le respond_with dans "class LibController". Désolé, je ne fais que deviner la voie possible, puisque je n'ai pas vu vos codes complets. Essayez de le manœuvrer, chose importante est d'utiliser une seule redirection. –