1

Dans un projet qui utilise restful_authentication avec acts_as_state_machine et l'activation du courrier électronique, j'obtiens une erreur de rendu double lorsqu'un utilisateur effectue l'action d'activation à partir du lien de courrier électronique.DoubleRenderError dans restful_authentication avec acts_as_state_machine lors de l'activation des utilisateurs

J'utilise la valeur par défaut

def activate 
    self.current_user = params[:activation_code].blank? ? false : User.find_by_activation_code(params[:activation_code]) 
    if logged_in? && !current_user.active? 
    current_user.activate! 
    flash[:notice] = "Signup complete!" 
    end 
    redirect_back_or_default('/') 
end 

pour activer, et la valeur par défaut

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

à redirigent. La méthode de redirection fonctionne dans tous les autres cas, elle est appelée de la même manière. L'erreur de double rendu se produit lors du rendu de la page page_principale/home qui est routée comme "/".

Que dois-je rechercher?

Répondre

1

Agit Comme State Machine aura parfois un comportement étrange où l'enregistrement enregistré écrit dans la base de données sera désynchronisé avec l'objet en mémoire. Je parie que vous avez une situation où l'objet ruby ​​correspondant à l'utilisateur nouvellement activé n'est pas mis à jour même si le champ dans la base de données est en cours de définition (et vice versa).

Je devrais voir l'action du contrôleur qui fonctionne réellement pour rendre la route que vous avez configurée pour correspondre à "/", mais je parie que vous avez des cas subtilement incohérents dans cette action qui sont déclenchés par cette incohérence dans AASM. Essayez de recharger l'objet utilisateur au début de l'action du contrôleur pour voir si le problème disparaît. Si ce n'est pas le cas, lancez le débogage en vous assurant que les changements d'état sont effectivement sauvegardés dans la base de données.

Questions connexes