Autoriser les commentaires sur Ruby on Rails

Dans l'itération précédente, Ajout de l'authentification RESTful, l'authentification a été ajoutée à votre blog afin que seuls les utilisateurs autorisés puissent créer des articles de blog. Cette itération ajoutera la fonctionnalité finale (et principale) du didacticiel du blog: les commentaires. Une fois ce didacticiel terminé, les utilisateurs pourront publier des commentaires anonymes sur les articles de blog sans se connecter.

La création des tables de base de données des commentaires et du contrôleur se fait de la même manière que les tables de base de données des publications et le contrôleur ont été créés - en utilisant le générateur d'échafaudage. Le générateur d'échafaudage créera des contrôleurs RESTful, cartographiera les itinéraires et créera des migrations de base de données. Mais avant de commencer, vous devez réfléchir à ce qu'est un commentaire et à ses données. Un commentaire a:

Une fois que vous avez décidé des membres des données d'un commentaire, vous pouvez exécuter le générateur d'échafaudage. Notez que le champ de publication est du type "références". Il s'agit d'un type spécial qui générera un champ ID pour lier la table des commentaires à la table des publications via une clé étrangère.

instagram viewer

Une fois les contrôleurs et les migrations générés, vous pouvez continuer et exécuter la migration en exécutant la tâche db: migrate rake.

Une fois les tables de base de données en place, vous pouvez commencer à configurer le modèle. Dans le modèle, des choses comme la validation des données - pour garantir la présence des champs obligatoires - et les relations peuvent être définies. Deux relations seront utilisées.

Un article de blog contient de nombreux commentaires. La relation has_many ne nécessite aucun champ spécial dans la table des publications, mais la table des commentaires a un post_id pour la lier à la table des publications. De Rails, vous pouvez dire des choses comme @poster des commentaires pour obtenir une liste des objets Comment appartenant à l'objet @post. Les commentaires sont également dépendant sur leur objet Post parent. Si l'objet Post est détruit, tous les objets de commentaire enfant doivent également être détruits.

Un commentaire appartient à un objet de publication. Un commentaire ne peut être associé qu'à un seul article de blog. La relation d'appartenance ne nécessite qu'un seul champ post_id pour être dans la table des commentaires. Pour accéder à l'objet de publication parent d'un commentaire, vous pouvez dire quelque chose comme @ comment.post dans Rails.

Voici les modèles de publication et de commentaire. Plusieurs validations ont été ajoutées au modèle de commentaire pour garantir que les utilisateurs remplissent les champs obligatoires. Notez également les relations has_many et appartient_to.

Le contrôleur de commentaires ne sera pas utilisé de la manière traditionnelle avec un contrôleur RESTful. Premièrement, il sera accessible uniquement à partir des vues Post. Les formulaires de commentaires et l'affichage sont entièrement dans l'action show du contrôleur Post. Donc, pour commencer, supprimez l'ensemble app / vues / commentaires pour supprimer toutes les vues de commentaire. Ils ne seront pas nécessaires.

Ensuite, vous devez supprimer certaines des actions du contrôleur Commentaires. Il suffit de créer et détruire Actions. Toutes les autres actions peuvent être supprimées. Étant donné que le contrôleur Commentaires n'est plus qu'un talon sans vue, vous devez modifier quelques emplacements dans le contrôleur où il tente de rediriger vers le contrôleur Commentaires. Partout où il y a un appel redirect_to, changez-le en redirect_to (@ comment.post). Vous trouverez ci-dessous le contrôleur complet des commentaires.

L'une des dernières pièces à mettre en place est le formulaire de commentaires, qui est en fait une tâche assez simple. Il y a essentiellement deux choses à faire: créer un nouvel objet Comment dans l'action show du contrôleur posts et afficher un formulaire qui se soumet à l'action create du contrôleur Comments. Pour ce faire, modifiez l'action show dans le contrôleur de messages pour ressembler à ce qui suit. La ligne ajoutée est en gras.

La dernière étape consiste à afficher commentaires. Des précautions doivent être prises lors de l'affichage des données d'entrée de l'utilisateur car un utilisateur pourrait essayer d'insérer des balises HTML qui pourraient perturber la page. Pour éviter cela, le h est utilisée. Cette méthode échappera à toutes les balises HTML que l'utilisateur tentera de saisir. Dans une autre itération, un langage de balisage tel que RedCloth ou une méthode de filtrage pourrait être appliqué pour permettre aux utilisateurs de publier certaines balises HTML.

Les commentaires seront affichés avec un partiel, tout comme les messages. Créez un fichier appelé app / vues / messages / _comment.html.erb et placez-y le texte suivant. Il affichera le commentaire et, si l'utilisateur est connecté et peut supprimer le commentaire, affichera également le lien Détruire pour détruire le commentaire.

Enfin, pour afficher tous les commentaires d'un article à la fois, appelez les commentaires partiels avec : collection => @ post.comments. Cela appellera les commentaires partiels pour chaque commentaire appartenant à la publication. Ajoutez la ligne suivante à la vue d'affichage dans le contrôleur des publications.

Dans la prochaine itération du didacticiel, simple_format sera remplacé par un moteur de formatage plus complexe appelé RedCloth. RedCloth permet aux utilisateurs de créer du contenu avec un balisage simple tel que * bold * pour bold et _italic_ pour italic. Ces informations seront disponibles pour les affiches du blog et les commentateurs.