Le problème avec la manipulation de l'objet dans les contrôleurs de objets révisables est que vous vous trouvez liquidez répéter beaucoup du même code dans chacun des contrôleurs. De plus, où mettez-vous le code? Soit vous liquidez avec des méthodes d'action sérieux lourds (par le soutien porcin sur vos 7 actions existantes) ou de commencer à créer des actions telles que
new_review, delete_review, etc
qui n'est pas RESTful et une odeur grave de code mendicité pour son propre contrôleur.
Par conséquent, quelque chose comme ça je considère avoir un contrôleur d'examen et soit l'ajout de paramètres à l'URL ou en utilisant des champs cachés pour indiquer quel objet l'examen appartient:
<%= f.hidden_field :reviewable_id, :value => @object.id %>
<%= f.hidden_field :reviewable_type, :value => @object.class %>
Ceci est particulièrement utile si tout autre travail doit être effectué sur l'objet de révision (comme enregistrer l'utilisateur actuel en tant qu'auteur, etc.), car il conserve toute la logique qui ne peut pas être expulsée vers le modèle en un seul endroit. Assurez-vous de bien délimiter le modèle associé et assurez-vous qu'il appartient à l'utilisateur, sinon les utilisateurs peuvent altérer l'URL et ajouter des commentaires à tout ce qu'ils veulent (bien sûr, cela s'applique partout où vous sélectionnez un objet). Cependant, si l'objet de révision est très léger et ne nécessite aucun traitement supplémentaire (c'est-à-dire une simple affectation des données affichées à l'objet), alors vous pouvez jeter un oeil à l'utilisation de Rails 2.3 et Rails 2.3. c'est nested object support.
Cela ne me semble pas très sûr. – Martin
Vous pouvez exécuter des validations avant de persister. – Ash