Je possède 3 modèles : Questions, Réponses, et Profils (je sais, ça devrait s'appeler "Utilisateurs"). Lorsque vous visualisez une question Q, j'interroge la base de données pour trouver les réponses à Q. (Elles sont liées par l'id.) Dans la vue, l'utilisateur actuel a la possibilité de supprimer sa réponse en cliquant sur le lien détruire affiché à côté de sa réponse :
%table
%tr
%td
Answers:
- @answers.each do |a|
%tr
%td
- @provider = Profile.find(a.provider)
%i
#{h @provider.username} said:
%br
#{h a.description}
%td
= link_to 'View full answer', a
%td
- if a.provider == @profile.id
#{link_to 'Delete my answer', a, :confirm => 'Are you sure?', :method => :delete}
Le problème est que lorsque l'utilisateur clique sur le lien "destroy", il est redirigé vers le site /answers/index. Je veux qu'il soit redirigé vers /questions/Q. Quelle est la meilleure façon de procéder ?
Je sais qu'il y a un redirect_to
mais je ne sais pas comment l'implémenter lorsque je veux rediriger vers une action pour un contrôleur différent. Il doit également se souvenir de la question dont la réponse est supprimée.
J'ai essayé de passer quelque chose comme :question_id dans link_to as :
#{link_to 'Delete my answer', a, :confirm => 'Are you sure?', :question_id => @question.id, :method => :delete}
Dans AnswersController#destroy :
def destroy
@answer = Answer.find(params[:id])
@answer.destroy
respond_to do |format|
format.html { redirect_to(answers_url) }
format.xml { head :ok }
end
@question = Question.find(params[:question_id])
redirect_to question_path(@question)
end
L'information :question_id n'est pas transmise à la méthode de destruction, et j'obtiens donc cette erreur :
Couldn't find Question without an ID
Pour confirmer, j'ai ajouté un puts
appel avant Question.find
et il a renvoyé nil
.
J'ai également essayé de stocker l'identifiant de la question dans les informations de la session. AnswersController#destroy change pour appeler session[:question_id] au lieu de params[:question_id]. Mais, j'obtiens une erreur différente :
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
Je ne suis pas sûr de savoir comment résoudre cette erreur. Où dois-je mettre le return
?
Toute aide serait appréciée !