Je suis un débutant en programmation. Malentendu, n'est-ce pas mal en premier lieu? Je vous serais reconnaissant si vous pouviez m'apprendre cela.
`` ・ Cause de l'erreur ・ Méthode pour découvrir la cause ・ Pourquoi la cause est une erreur ''
Est décrit.
J'ai eu une erreur sur la page qui transite après l'inscription de l'utilisateur.
J'ai pu l'afficher dans l'environnement de développement local (cloud9) sans aucun problème ... Après que l'erreur s'est produite, j'ai essayé googled, essayé googled à plusieurs reprises et résolu le problème en toute sécurité pendant un jour et demi.
__ Eh bien, quelle était la cause __
La description de l'action du contrôleur correspondant était incorrecte.
@user = User.find_by(params[:id])
#erreur
@user = User.find(params[:id])
#C'est correct
La partie importante de ce problème n'est pas la réponse que la méthode __ était différente, mais la manière de résoudre l'erreur. __
La méthode de pêche est plus reproductible que la méthode de capture du poisson. C'est la première fois que je m'inquiète depuis plus d'un jour depuis que j'ai commencé à apprendre la programmation par moi-même. Vous devez réfléchir à la manière de gérer l'erreur.
** À partir de cette erreur, je vais résumer ce qu'il faut faire lorsqu'une erreur heroku se produit. ** **
We're sorry, but something went wrong
Cette erreur semble se produire en raison de diverses causes telles qu'une erreur de méthode, syntax_error, le fichier de migration n'est pas reflété comme cette fois.
Comme moi, la plupart d'entre eux __ ① Problème de base de données ② Problème de code __ Il semble qu'il existe de nombreux modèles résolus par.
En ce qui concerne ①, le numéro d'identification de l'URL augmente à chaque fois que vous vous inscrivez, il semble donc que vous puissiez vous inscrire. Dans le cas de (2), vous devez trouver l'erreur dans de nombreux répertoires.
Mon cœur s'est brisé. Je ne sais pas où est la cause.
Il existe différentes méthodes, mais
Au terminal
heroku logs --tail
(heroku logs --t est également acceptable)
Vous avez maintenant confirmé les détails de l'erreur.
Cependant, les débutants ne savent pas où l'erreur est écrite.
Par conséquent, au début, j'ai jeté un coup d'œil rapide.
La raison pour laquelle cela a pris si longtemps cette fois est que je n'ai pas fait face à ce journal correctement. __
Même si vous regardez Qiita, teratail et les blogs, il est dit "vérifiez avec le journal".
C'est important, alors je le répète! !!
__ Message d'erreur, faites face au journal correctement! !! __
Si vous regardez de plus près
Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.9ms | Allocations: 568)
De plus, il y a eu une autre erreur.
ActiveRecord::StatementInvalid (PG::DatatypeMismatch: ERROR: argument of WHERE must be type boolean, not type integer)
Vous avez écrit une erreur dans ActiveRecord.
Le contenu de l'erreur est __ "L'argument de where doit être une valeur booléenne et non un entier." __ Et cela
Y a-t-il une erreur de recherche dans la base de données? Et j'ai trouvé une erreur de code au début.
référence Tutoriel Rails https://qiita.com/nakayuu07/items/3d5e2f8784b6f18186f2 https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3
__find méthode __
Tout d'abord, find peut être recherché par la clé primaire (identifiant automatiquement dans les rails). params [: id] renvoie un nombre sous forme de chaîne de caractères (exemple: '1'), mais la méthode find le convertit automatiquement en entier.
pour cette raison
User.find(params[:id])
#Quand
User.find(entier)
Équivalent.
__ Alors qu'en est-il de find_by? __ Méthodes pouvant être recherchées par une autre clé que la clé primaire En tant que syntaxe
User.find_by(id: 1)
User.find_by(name: "em")
En d'autres termes, le code au moment de l'erreur ne savait pas quel attribut était recherché.
User.find_by(1)
C'était, bien sûr, une erreur.
J'essaie de vérifier si le routage vers la page correspondante, l'action et l'affichage de html.erb fonctionnent correctement dans le test d'intégration, et find et find_by retournent en vert.
Je ne connais pas encore la raison. Je l'ajouterai quand je le comprendrai.
・ Visionner fermement les messages d'erreur et les journaux ・ Les erreurs dans heroku peuvent être vues dans `` heroku logs --t '' ・ Différence entre "find" et "find_by"