・ Le tutoriel Rails est la 4ème édition ・ Cette étude est le 3e tour (2e tour après le chapitre 9) ・ L'auteur est un débutant qui a fait tout Progate
・ Si vous le lisez, vous ne le comprendrez pas. ・ Recherchez et résumez les termes que vous ne comprenez pas (en bas de l'article, glossaire). ・ Plongez dans ce que vous ne comprenez pas. ・ Travaillez sur tous les exercices. ・ Ne copiez pas le code autant que possible.
Développement du système d'authentification, 5ème étape, enfin à deux chiffres, le chapitre 10 est entré. Terminons l'action REST. Cliquez ici pour la BGM d'aujourd'hui. PLASTIC GIRL IN CLOSET "TOY" Sera-ce un album il y a 10 ans ... Le temps passe vite. Sora, ma vingtaine est terminée.
-Si vous mettez target = "\ _ blank" dans la balise a du lien, le lien sera ouvert dans un autre onglet. (Les mesures de sécurité sont des exercices) -Rails détermine en interne s'il s'agit d'un nouvel utilisateur ou d'un utilisateur existant à l'aide de la méthode new_record de Active Record.
<a href="http://gravatar.com/emails" target="_blank" rel="noopener">change</a>
2. Refactorisons la vue new.html.erb (extrait 10.6) et la vue edit.html.erb (extrait 10.7) en utilisant les partiels dans l'extrait 10.5 (supprimons la duplication de code). Conseil: vous pouvez utiliser la méthode de fourniture utilisée dans 3.4.3 pour supprimer les doublons 3. (Si vous avez déjà résolu l'exercice de la liste associée 7.27, vous ne pourrez peut-être pas bien résoudre cet exercice. Sinon, essayez de vous attaquer à cet exercice en réfléchissant à ce qui est différent dans votre code existant. Disons, par exemple, que j'utiliserais la technique de transmission des variables utilisées dans le Listing 10.5 pour passer les URL nécessaires dans le Listing 10.6 et le Listing 10.7 au Listing 10.5.) → Faites-le. (Pour une raison quelconque, je faisais les exercices du chapitre 7, mais il n'y avait aucune différence entre les points de vue. Est-ce que je l'ai renvoyé quand je réfléchissais?)
assert_select "div.alert", "The form contains 4 errors."
Envoyons des informations valides pour voir si l'édition réussit réellement.
Si vous passez à une adresse e-mail appropriée qui n'est pas liée à Gravatar (telle que [email protected]), comment votre image de profil sera-t-elle affichée? Modifiez en fait l'adresse e-mail à partir du formulaire d'édition et changez l'adresse e-mail. Allons vérifier. → Collectivement, changez l'adresse de l'utilisateur de l'échantillon de manière appropriée → Succès, l'image par défaut du grappin s'affiche.
Authentification: identifie l'utilisateur du site Autorisation: gère ce que les utilisateurs peuvent faire
before_action: Dans le contrôleur, exécutez une méthode spécifique juste avant qu'une action ne soit exécutée. Appliquer uniquement à une action spécifique en transmettant uniquement: [: action] à l'option.
2. Laquelle des actions ci-dessus peut être facilement testée avec un navigateur? → Modifier, non? Parce que la requête HTTP est GET. Il sera affiché sur le navigateur.
objet de requête: Reportez-vous au guide Rails. Outre l'URL, il contient également diverses informations côté client.
users_edit_test.rb
test "successful edit with friendly forwarding" do
get edit_user_path(@user)
assert_equal session[:forwarding_url], edit_user_url(@user)
log_in_as(@user)
assert_redirected_to edit_user_url(@user)
assert_nil session[:forwarding_url]
assert_redirected_to edit_user_url(@user)
name = "Foo Bar"
email = "[email protected]"
patch user_path(@user), params: { user: {name: name,
email: email,
password: "",
password_confirmation: "" } }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal name, @user.name
assert_equal email, @user.email
end
2. Mettons la méthode de débogage introduite en 7.1.3 dans la nouvelle action du contrôleur Sessions. Ensuite, déconnectez-vous et essayez d'accéder à / users / 1 / edit (le débogueur devrait s'arrêter prématurément). Passons maintenant à la console et voyons si la valeur de session [: forwarding_url] est correcte. Vérifiez également la valeur de request.get? Lors de l'accès à la nouvelle action (lors de l'utilisation du débogueur, le terminal s'arrête parfois à des endroits inattendus ou se comporte de manière étrange. J'ai l'impression d'être devenu un développeur de (Colonne 1.1), alors calmons-nous et traitons-le). → Si vous entrez session [: forwarding_url] dans (byebug), l'URL stockée (~ / users / 1 / edit) sera affichée, et si vous entrez request.get?, True sera retourné.
site_layout_test
require 'test_helper'
class SiteLayoutTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "layout links" do
get root_path
assert_template 'static_pages/home'
assert_select "a[href=?]", root_path, count: 2
assert_select "a[href=?]", help_path
assert_select "a[href=?]", about_path
assert_select "a[href=?]", contact_path
assert_select "a[href=?]", signup_path
get contact_path
assert_select "title", full_title("Contact")
get signup_path
assert_select "title", full_title("Sign up")
log_in_as(@user)
follow_redirect! #Ou obtenir un utilisateur_path(@user)
assert_select "a[href=?]", users_path
assert_select "a[href=?]", user_path(@user)
assert_select "a[href=?]", edit_user_path(@user)
assert_select "a[href=?]", logout_path
end
end
** Différences par rapport aux autres exercices que j'ai examinés ** -Le test pour les utilisateurs connectés est séparé du test pour les utilisateurs non connectés. ⇨ Il peut être préférable de séparer cela compte tenu de la lisibilité du code. Après cela, est-il plus fiable comme test pour séparer clairement les opérations?
-Obtenir root_path après la connexion. ⇨ N'est-ce pas contre nature? Le comportement par défaut après la connexion passe-t-il à la page utilisateur? Pourquoi rentrer à la maison? Donc, puisque log_in_as fait une demande de publication, j'ai pensé que je pourrais réellement aller sur cette page avec follow_redirect! Et la tester, ou je pourrais spécifier la page à tester avec get user_path (@user). Si un problème apparaît plus tard, nous l'examinerons.
Lorsque j'ai mis le faux bijou ici, des lettres rouges sont apparues, alors mettez à jour le paquet. Je m'habitue à ce genre de chose.
>> User.paginate(page: nil)
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 11], ["OFFSET", 0]]
(0.2ms) SELECT COUNT(*) FROM "users"
=> #<ActiveRecord::Relation [#<User id: 1, name: "Example User", email: "[email protected]",
Ci-dessous, il est omis car il est long
2. De quelle classe l'objet de pagination a-t-il été acquis dans l'exercice précédent? En quoi est-il différent de la classe User.all? Comparez-le. → User :: Classe ActiveRecord_Relation. C'est le même.
>> User.paginate(page: nil).class
=> User::ActiveRecord_Relation
>> User.paginate(page: nil).class.superclass
=> ActiveRecord::Relation
>> User.all.class
=> User::ActiveRecord_Relation
Il existe diverses autres méthodes de pagination, telles que Kaminari et Pagy. (Essayons-le dans le futur)
2. Je les ai commentés tous les deux plus tôt, mais si vous en commentez un seul, assurons-nous que le test reste vert. Quel test dois-je ajouter si je veux tester que les deux liens will_paginate existent? Conseil: Reportez-vous au tableau 5.2 et ajoutez un test pour compter le nombre. Faisons le. → Puisqu'il est encore VERT, le compte: 2 est ajouté.
users_index_test.rb
test "index including pagination" do
log_in_as(@user)
get users_path
assert_template 'users/index'
assert_select 'div.pagination', count: 2
User.paginate(page: 1).each do |user|
assert_select 'a[href=?]', user_path(user), text: user.name
end
end
users_controller_test.rb
test "should not allow the admin attribute to be edited via the web" do
log_in_as(@other_user)
assert_not @other_user.admin?
patch user_path(@other_user), params: {
user: { password: @other_user.password,
password_confirmation: @other_user.password,
admin: true } }
assert_not @other_user.reload.admin?
end
Quoi? Mais sera-ce VERT? Les personnes qui ont écrit la réponse sont-elles vraiment devenues ROUGE? ?? Quand je l'ai recherché, Cet article. @ other_user.password Si vous le faites, vous ne pouvez pas le faire! Donc, quand je l'ai changé en "mot de passe", il est devenu ROUGE. Ensuite, supprimez: admin du permis et le test est VERT.
-Implémenté éditer, mettre à jour, supprimer. -Afficher la liste des utilisateurs avec index. Mettez en œuvre la pagination avec des gemmes. -Donner l'attribut admin et mettre en œuvre les privilèges de gestion des utilisateurs. Vous pouvez maintenant utiliser admin, qui renvoie une valeur logique. -Exécuter une méthode spécifique avant une action spécifique avec befoure_action. (Il y a aussi after_action) -Friendly forwarding = Stocker la demande de page (GET uniquement) à laquelle vous vouliez accéder dans la session et la rediriger après la connexion. Après cela, la session stockée est supprimée. -Créer des exemples de données (utilisateur) dans db / seedss.rb.
Le chapitre 10 qui avait un certain volume est terminé. Vous avez maintenant implémenté toutes les fonctions de base. Il y a des situations où j'ai des problèmes avec les exercices, mais il n'y a rien que je ne peux pas comprendre si je cherche. Travaillons calmement. Suivant Suivant! Chapitre 11! … Ah, la fonction d'authentification à l'aide d'une adresse e-mail… (yeux distants). La raison en sera expliquée dans les chapitres suivants.
⇨ Allez au chapitre 11! ⇦ Cliquez ici pour le chapitre 9 Cliquez ici pour les conditions préalables et le statut de l'auteur pour l'apprentissage
・ Transfert Transférez quelque chose. Le transfert amical est-il un «transfert aimable»?
Recommended Posts