2009-02-17 7 views
0

J'ai trois modèles qui peuvent tous avoir un avis et chaque critique doit appartenir à un utilisateur. J'utilise des associations polymorphes: as =>: révisable mais je ne sais pas où je devrais mettre la logique pour créer une revue pour chaque modèle. Je suppose que le CRUD pour chaque revue devrait être géré par le reviews_controller (ou les attributs imbriqués? Dans les autres contrôleurs?), Mais alors comment associer la revue avec chaque modèle?comment créer des avis en utilisant des associations polymorphes

Je n'ai pas trouvé d'exemple de modèle/vue/contrôleur sur google, peut-être que cela aiderait beaucoup à effacer les choses.

Merci, Cezar

Répondre

0

Comme il est une mise à jour du modèle, il est plus facile de passer par le contrôleur du modèle. De plus, il n'y a pas à confondre avec quel modèle appartient la revue.

Regardez ce que fait acts_as_commentable. Il pourrait être plus facile de réutiliser que de rouler le vôtre.

http://github.com/jackdempsey/acts_as_commentable/tree/master

2

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.

+0

Cela ne me semble pas très sûr. – Martin

+0

Vous pouvez exécuter des validations avant de persister. – Ash

Questions connexes