J'ai 3 modèles: Questions, Réponses et Profils (je sais, ça devrait s'appeler "Utilisateurs"). Lorsque vous affichez une question Q, j'interroge la base de données pour les réponses à Q. (Ils sont liés par id.) Dans la vue, l'utilisateur actuel a la possibilité de supprimer sa réponse en cliquant sur le lien détruire à côté de sa réponse :Rediriger les utilisateurs après avoir détruit
%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 détruire, il redirige la/réponses/index. Je veux qu'il redirige vers/questions/Q. Quelle est la meilleure façon de faire cela?
Je sais qu'il existe une méthode redirect_to
, mais je ne sais pas comment l'implémenter lorsque je veux rediriger vers une action pour un autre contrôleur. Il doit également se souvenir de la question à partir de laquelle la réponse est supprimée.
J'ai essayé de faire passer quelque chose comme: question_id en link_to comme:
#{link_to 'Delete my answer', a, :confirm => 'Are you sure?', :question_id => @question.id, :method => :delete}
En 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
Le: question_id informations ne sont pas transmises à la méthode destroy, donc je reçois ce erreur:
Couldn't find Question without an ID
Pour confirmer, j'ai ajouté un appel puts
avant Question.find
, et il a renvoyé nil
.
J'ai également essayé de stocker l'identifiant de la question dans les informations de session. AnswersController # détruit les modifications de la session d'appel [: 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 comment adresser est erreur. Où dois-je mettre le return
?
Toute aide serait appréciée !!
Est-réponse appartient à la question? –
Une question peut avoir beaucoup de réponses. Cependant, je n'ai pas mis ces relations. Bon point! – user5243421