Dites que je crée un Q & Un site comme StackOverflow. J'ai deux ressources: Question et Réponse. J'utilise des routes de ressources Rails REST par défaut, de sorte que chaque ressource possède son propre contrôleur et ses propres méthodes de création.Rendu de différentes actions de contrôleur dans Rails lors de l'utilisation de contrôleurs orientés ressources
Dans la vue /questions/show
, je souhaite autoriser l'utilisateur à soumettre une réponse à la question en question. Le formulaire POST à /answers
, qui sera acheminé en tant que demande au AnswersController
avec un appel à la méthode create
.
Si la réponse a été créée, je peux simplement rediriger vers la question d'origine. Cependant, j'ai des problèmes avec les échecs de validation sur l'objet de réponse. Je dois afficher la vue /question/show
et afficher les erreurs de validation pour l'objet de réponse. Ce n'est pas clair pour moi comment le faire le mieux.
Voici des exemples de ce à quoi pourraient ressembler les deux contrôleurs.
class AnswersController < ApplicationController
def create
@answer = Answer.new(params[:answer])
if @answer.save
redirect_to @answer.question
else
# What should go here??
end
end
end
class QuestionsController < ApplicationController
def show
@question = Question.find(params[:id])
@answer = Answer.new(:question_id => @question.id)
end
end
ce qui devrait aller dans la clause else des de créer AnswersController
méthode? Une redirection semble incorrecte, car l'erreur est réellement provoquée par la même requête. Appeler quelque chose comme render :template => 'questions/show'
semble faux aussi, puisque je dois initialiser toutes les variables d'instance dont le modèle dépend. Ce style d'avoir des actions séparées pour appeler GET pour voir le formulaire de création d'un objet et appeler POST pour créer réellement l'objet semble bien fonctionner dans un contrôleur simple.
Comment cela peut-il être fait entre les contrôleurs?