J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 1)

À propos des extensions dans le chapitre 14 du didacticiel Rails

Le chapitre 14 du didacticiel Rails a quelques thèmes pour étendre ses fonctionnalités à ceux qui ont terminé le didacticiel. Je conteste la fonction de réponse, qui est le premier thème. Je travaille toujours dessus, mais je le posterai aussi loin que possible.

Vérifiez les exigences pour établir et faire des spécifications

Les exigences sont rédigées comme suit.

Twitter a une fonctionnalité qui vous permet de répondre à un utilisateur en entrant le nom de connexion de l'utilisateur après le signe @ lors de la saisie du micro-message. Ce message n'est visible que par le fil du destinataire et par les personnes qui vous suivent. Implémentons une version simple de cette fonctionnalité de réponse. Plus précisément, @reply ne doit apparaître que dans le flux du destinataire et celui de l'expéditeur.

Des conseils de spécifications sont également écrits.

Pour implémenter cela, je pense que vous devez ajouter la colonne in_reply_to de la table microposts et une portée d'inclusion_replies supplémentaire au modèle Micropost.

Décomposez vos besoins en particulier.

・ @Reply est affiché par les trois parties suivantes Destinataire de la réponse Expéditeur de la réponse (soi-même) Répondre aux abonnés de l'expéditeur

Non visible pour les utilisateurs autres que ceux ci-dessus

-Lorsque "nom de connexion de l'utilisateur @reply" est entré au début du micro-message, ce message est considéré comme une réponse.

Plongez dans les spécifications, recherchez une référence au twitter illustré

Quand j'ai relu "6.2.5 Unicité de l'adresse e-mail" dans le didacticiel, il était écrit s'il fallait faire la distinction entre les majuscules et les minuscules. Si le nom d'utilisateur doit être sensible à la casse ou si Taro et TARO doivent être différents. Découvrez comment Twitter est sur le net.

Bien que ce soit le même en interne, il y avait de nombreux articles sur lesquels il était divisé au moment de la saisie. Je n'ai pas trouvé l'article que j'écrivais. Je vais le faire avec les mêmes spécifications que Mead.

J'ai décidé d'ajouter cette fonctionnalité de cas plus tard plutôt que depuis le début. Cela semblait facile à ajouter plus tard.

Le type de fonction à créer est similaire à la fonction ajoutée auparavant, alors relisez-le

C'est similaire aux fonctionnalités que nous avons ajoutées précédemment, alors relisez quelles fonctionnalités sont similaires.

Similaire à la fonction du micropost au chapitre 13 Similaire à la fonction d'enregistrement des utilisateurs au chapitre 6.7 6.2.5 Vérifier l'unicité Unicité de l'adresse e-mail

Sur la base du résultat, nous avons considéré les fonctions suivantes.

-Ajout d'une fonction au modèle qui peut juger d'afficher ou non par réponse Si ce message est une réponse -Ajout de la fonction pour déterminer l'entrée de @reply pour afficher ou contrôler -Ajouté au modèle et à la vue afin que le nom d'utilisateur soit unique

Nous avons décidé d'ajouter la dernière fonctionnalité "nom d'utilisateur unique" plus tard plutôt que de partir du début. C'est parce que j'ai pensé que je devrais d'abord créer quelque chose qui ne fonctionne qu'avec des données de test uniques, puis ajouter une fonction de contrainte qui le rendra unique plus tard.

Modèle pour la conception détaillée des fonctions

Relisez le chapitre 14, 14.1.1. C'était un parent entre les identifiants.

Je pense que j'ai besoin d'ajouter une colonne in_reply_to dans la table microposts et une portée d'inclusion_replies supplémentaire au modèle Micropost.

Pensez à la façon de changer le modèle avec l'indice.

microposts

Nom de colonne attribut
id integer
content text
user_id integer
in_reply_to integer
created_at datetime
updated_at datetime

Quel serait le type si nous ajoutions une colonne pour in_reply_to? Je pensais que c'était la même chose que id et integer car il identifie quel utilisateur.

Méthode pour concevoir la fonction en détail

S'il faut ajouter une méthode micropost ou modifier une méthode existante. Reportez-vous au tableau 13.1 user.micrposts Modifications existantes qui remplacent l'ensemble des micro-messages utilisateur user.microposts.build (arg) Modification existante qui renvoie un nouvel objet Micropost associé à l'utilisateur user.microposts.find_by (id: 1) Modification existante pour rechercher des microposts associés à l'utilisateur et ayant l'ID 1.

Pensez à ajouter une méthode de réponse. user.microposts.create (arg, reply: user2) Créer un micro-message de réponse à user2 Nous décidons de modifier la méthode de création existante.

Vue détaillée des fonctions de conception

Il existe deux écrans principaux, l'un pour saisir une réponse et l'autre pour afficher une réponse.

Je pensais que je n'avais pas besoin d'augmenter le nombre d'éléments d'entrée, car j'ai mis @reply au début du contenu.

Avez-vous besoin d'un écran de réponse uniquement pour la sortie? Vérifiez Twitter. Si vous cliquez sur le Tweet d'origine, la réponse passera à un autre écran et la liste des réponses s'affichera. Les tweets du parent et de l'enfant de la réponse sont affichés dans une liste.

C'est un peu compliqué, donc je n'irai pas aussi loin cette fois, et je vais l'afficher sur le même écran que le Tweet original.

L'image à l'écran n'est que du texte car il est difficile de faire une simulation. comment box : @reply michael Cum aspermatur ..

Afficher l'image du flux @reply michael Cum aspermatur ..

Afficher la vérification des erreurs d'entrée pour concevoir des fonctions en détail

Si le user_id n'est pas trouvé, la conception conviviale affichera une erreur pendant que vous tapez. Je vais montrer l'erreur car elle doit être vérifiée lors de la création.

Que faire si user_id est supprimé après la publication? Dois-je supprimer ce micropost? Je pense qu'il vaut mieux ne laisser que le micropost qui a été répondu à la personne qui n'est plus là, et je pense que le micropost ne sera pas supprimé.

Temps requis

3,0 heures du 27/09 au 01/10.

Recommended Posts

J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 1)
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 5):
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 2): Changer de modèle
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 4): une fonction qui rend l'utilisateur unique
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
[Rails] J'ai créé une fonction de brouillon en utilisant enum
J'ai créé un outil de vérification pour le module de version
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
J'ai fait une simple fonction de recommandation.
J'ai créé un plug-in pour IntelliJ IDEA
J'ai créé un outil Diff pour les fichiers Java
J'ai créé une bibliothèque d'extension Ruby en C
J'ai créé un robot LINE avec Rails + heroku
J'ai fait un portfolio avec Ruby On Rails
J'ai créé une image Docker pour la version japonaise de SDAPS
J'ai changé la façon dont le didacticiel Rails fonctionne: Notes du didacticiel Rails - Chapitre 9
J'ai fait une méthode pour demander la prime vendredi
Remarque sur l'initialisation des champs dans le didacticiel Java
Que dois-je utiliser pour le framework de test [Rails]
Je souhaite définir une fonction dans la console Rails
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai essayé de faire une version japonaise de la transmission automatique du courrier de Rails / devise
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
Je souhaite implémenter une fonction d'édition des informations produit ~ part1 ~
Une note sur la fonction de départ de Ruby on Rails
J'ai essayé JAX-RS et pris note de la procédure
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Modéliser Digimon avec DDD pour la première fois Partie 1
J'ai créé une application de chat.
Rails ~ Comprendre la fonction de message ~
[Rails] Implémentation de la fonction tutoriel
Lorsque j'ai créé un graphique à barres avec MPAndroidChart, l'étiquette de l'axe des x était mal alignée pour une raison quelconque
Une demi-année d'auto-apprentissage fait du SPA avec Rails + Nuxt.js, alors jetez un œil
[Rails] J'ai créé une mini-application de calendrier simple avec des spécifications personnalisées.
Implémentez une fonction de recherche affinée pour plusieurs modèles sans gemme Rails5.
Je souhaite ajouter une fonction de navigation avec ruby on rails
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai récemment créé une application js dans le langage courant de Dart
J'ai fait un petit bijou pour poster le texte du mode org sur qiita
J'ai posé une question qui peut être utilisée pour des entretiens techniques
Création d'une méthode pour demander Premium Friday (version Java 8)