J'ai étudié Rails pour changer d'emploi en une société de développement interne basée sur le Web! Dans le cadre de cette étude, je fais la 6ème édition du tutoriel Rails, et je mentionnerai que je pensais que c'était __ important & __ à retenir.
★ Qu'est-ce qu'un bijou? ――Le paquet Ruby publié par Ruby Gems
★bundle install --Une commande pour installer ce qui est nécessaire pour le développement avec Rails décrit dans Gemfile
★rails db:migrate --Fonctions utilisées lors du changement de structure (table, colonne) de la base de données utilisée par les rails ・ Flux approximatif d'utilisation des rails db: migrer
__ Le pipeline d'actifs est divisé en trois fonctions principales (ci-dessous). __ (* Explication ★ Bref résumé)
[Le plus grand avantage du pipeline d'actifs] Les actifs optimisés pour l'efficacité des applications de production sont également générés automatiquement. (= Cela chargera automatiquement la page plus rapidement dans l'environnement de production.) Ce faisant, il est possible de maintenir «la lisibilité des fichiers dans l'environnement de développement» et de fournir l'environnement le plus solide pour chacun dans deux environnements différents, «dans l'environnement de production, augmenter la vitesse d'exécution de l'application». ★ En bref, «l'environnement de développement» et «l'environnement de production» sont optimisés, et c'est le plus efficace / pratique.
*= require_tree . #app/assets/J'essaye d'inclure tous les fichiers CSS dans les feuilles de style
*= require_self #Fichier manifeste(application.css)J'essaye de m'inclure
Sporockets lit les commentaires ci-dessus dans le fichier manifeste.
★ En bref, les actifs sont regroupés pour faciliter leur utilisation dans le navigateur.
assert_select "a[href=?]", help_path,
<a href="/help”>...</a>
assert_select "a[href=?]", root_path, count: 2
Count signifie qu'il existe deux liens vers root_path et que deux sont testés.
Il existe différentes manières de spécifier assert_select. Voici quelques exemples typiques.
Enregistrement actif: la bibliothèque Rails par défaut qui interagit avec la base de données
Lors de la création d'un modèle, utilisez la commande générer un modèle. Exemple) Création d'un modèle utilisateur avec des attributs tels que le nom et l'adresse e-mail
$ rails generate model User name:string email:string
[Convention de dénomination des rails] --Nom du contrôleur: Multiple (Exemple: Utilisateurs) --Nom du modèle: forme unique (exemple: utilisateur) └ Parce que le modèle représente un utilisateur --Nom de la table: multiple └Parce que la table (DB) contient des informations sur plusieurs utilisateurs
--user = User.new: Créer une instance --user.save: Enregistrer le modèle
>> user = User.new(name: "Michael Hartl", email: "[email protected]")
>> user.save
--User.create: Comment créer et enregistrer un modèle en même temps via Active Record
>> User.create(name: "Another Sky”, email: "[email protected]")
--Accès au modèle (<nom de l'objet>.
>> user.name
=> "Michael Hartl"
>> user.email
=> "[email protected]"
>> user.updated_at
=> Mon, 23 May 2016 19:05:58 UTC +00:00
>> User.find(1)
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">
>> User.find_by(email: "[email protected]")
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">
Cas de validation souvent utilisé dans Active Record
__ Comment procéder aux tests de développement pilotés par les tests __
rails test: models: commande pour exécuter uniquement des tests sur les modèles
$ rails test:models
Le nom de la migration peut être spécifié librement. En spécifiant la fin (to_users), Rails créera automatiquement une migration qui ajoute des colonnes à la table des utilisateurs.
Exemple) Pour générer un fichier de migration appelé add_password_digest_to_users, exécutez la commande suivante.
$ rails generate migration add_password_digest_to_users password_digest:string
--Active Record vous donne de nombreuses méthodes pour créer et manipuler des modèles de données.
"Partagé": les partiels utilisés par plusieurs vues sont des répertoires dédiés
assert_select: la cible du test est CSS ・ Pour la classe → id nom de la div # CSS
assert_select 'div#error_explanation'
Pour classe → div.CSS nom de classe
assert_select 'div.field_with_errors'
--_ __ HTTP est un protocole sans état __ --Un protocole sans gestion d'état
Il est traité comme une transaction indépendante (traitement) sans utiliser du tout les informations des demandes précédentes et suivantes.
Il n'y a donc pas de "moyen" de conserver des informations telles que l'ID utilisateur dans le protocole HTTP.
Lors de la gestion des informations utilisateur etc. sur une application Web, il est nécessaire de définir séparément une connexion semi-persistante entre le client et le serveur dans "Session".
Qu'est-ce que assert_template: Teste si l'URL après assert_template rend la vue.
assert_template 'sessions/new'
Ruby est conçu pour regarder nil et faux et rendre chaque objet vrai. En rubis||Lorsque vous utilisez plusieurs opérateurs dans une ligne dans une expression, il est conçu pour évaluer les termes dans l'ordre à partir de la gauche et terminer le processus lorsqu'il devient vrai pour la première fois. Cette méthode d'évaluation est appelée évaluation de court-circuit.
L'opérateur __ && __ a une conception similaire, sauf que le terme est évalué à partir de la gauche et que le processus se termine lorsqu'il devient false.
.& __opérateur de navigation sûre(Ou"Opérateur Bocchi)__
Vous pouvez utiliser l'opérateur Bocchi de Ruby pour écrire des modèles comme obj && obj.method sous une forme condensée comme obj & .method.
Pour donner un exemple, le code d'opérateur logique suivant
```ruby
if user && user.authenticate(params[:session][:password])
Il peut être simplifié comme suit.
if user&.authenticate(params[:session][:password])
&& user.authentifier c'est&.Il peut être simplifié en authentifiant.
N'est-ce pas trop simpliste pour un débutant Ruby? Je suis un peu confus,
Il semble que l'opérateur Bocchi soit souvent utilisé, il semble donc que vous deviez faire un effort pour essayer de vous en souvenir vous-même.
#### 8.4.1 Résumé de ce chapitre
- Vous pouvez utiliser la méthode Rails'``` session``` pour conserver l'état au moment de la transition de page. Vous pouvez également utiliser des cookies pour conserver l'état temporaire. (* Étant donné que tous les navigateurs interdiront le partage de cookies entre domaines à l'avenir, vous ne pourrez pas utiliser l'identifiant Rakuten ○, etc. acquis dans le domaine Rakuten ○ dans un autre domaine (domaine autre que Rakuten ○).)
- Vous pouvez enregistrer temporairement l'ID utilisateur, etc. dans le navigateur en utilisant la méthode `` session ''.
--Test Driven Development (TDD) est utile pour éviter les bogues de régression
- L'avertissement d'intégration vous permet de tester si le routage, les mises à jour de la base de données et les changements de disposition sont effectués avec succès
## Chapitre 9 Évolution du mécanisme de connexion
#### 9.1.1 Jeton de stockage et cryptage
Il existe quatre façons bien connues de voler des cookies.
1. Extrayez les cookies directement des paquets réseau qui transitent par un réseau mal géré avec un logiciel spécial appelé Packet Sniffer.
2. Extrayez le jeton de stockage de la base de données
3. Utilisez les scripts intersites (XSS)
4. Volez l'accès en utilisant directement le PC ou le smartphone sur lequel l'utilisateur est connecté
La contre-mesure de 1. est de soutenir le site avec 7.5 SSL
Correspondance de 2. Dans ce didacticiel, le jeton de stockage est stocké dans la base de données sous le nom __hashing __
La correspondance de 3. est automatiquement traitée dans Rails
4. Il est impossible pour le système de prendre des mesures de défense fondamentales
■ Utilisation de attr_accessor
Lorsque vous souhaitez définir les attributs d'un objet pouvant être lu et écrit
-Comment définir un objet utilisateur avec le nom et la description des attributs
Pour les rails
```ruby
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :description
t.timestamps null: false
end
end
end
Pour du code Ruby pur qui ne gère pas DB
class User
attr_accessor :name, :description
end
Au fait, attr_reader
est utilisé lorsque vous voulez définir des attributs en lecture seule.
attr_writer
Est utilisé lorsque vous souhaitez définir des attributs en écriture seule.
"Il y a 10 types de personnes dans ce monde. Quelqu'un qui comprend le binaire et d'autres qui ne comprennent pas le binaire" est une vieille blague dans l'industrie. C'est comme Roland (rires) Peut-être que Roland est resté coincé d'ici? ??
■ Opérateur Trinity Le code if else suivant
if boolean?
var = foo
else
var = bar
end
Peut être raccourci comme suit
var = boolean? ? foo : bar
Nous utilisons souvent l'opérateur ternaire comme valeur de retour d'une méthode.
assert_equal
Est
assert_equal <expected>, <actual>
target="_blank"
Utilisez pour créer un lien vers un nouvel onglet(Ou fenêtre)C'est un élément utile lors de la création de liens vers un autre site Web car il s'ouvrira dans.
★ Personnellement, je suis satisfait d'un autre onglet lorsque je passe à la destination du lien, donc lorsque je l'implémente, je veux vraiment l'implémenter!
Personnellement, je pense que les sites pour PC (en supposant que les PC soient les principaux clients) devraient définitivement être introduits!
<a href="https://gravatar.com/emails" target="_blank">change</a>
Rails utilise `form_with (@user)`
pour construire un formulaire, et quand``
@ user.new_record?``
Is `true```, c'est
`POST. , `` `` PATCH
quand
false``.
Dans __ * Tutorial, user est utilisé au lieu de @user, mais si vous l'utilisez, une erreur se produira dans users_login_test, utilisez donc @user. __
sessions_controller.rb
def create
@user = User.find_by(email: params[:session][:email].downcase) #Réduisez la valeur d'e-mail reçue dans le hachage des paramètres, transmettez-la à l'attribut d'e-mail, recherchez l'utilisateur avec la même valeur d'e-mail dans le modèle Utilisateur et affectez-le à la variable utilisateur.
if @user && @user.authenticate(params[:session][:password]) #La variable utilisateur existe dans la base de données et la valeur de mot de passe reçue dans le hachage des paramètres est la même que la valeur de messagerie de l'utilisateur.(Si le mot de passe et l'adresse e-mail ont la même valeur)true
log_in @user # sessions_journal d'aide_Exécutez la méthode in et utilisez l'utilisateur de la méthode de session_Envoyer l'identifiant à l'identifiant (stocké comme cookies temporaires dans le navigateur)
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user) #Se souvenir de la session lors de la connexion_l'attribut moi est 1(La case à cocher est activée)Si tel est le cas, détruisez la session définitivement, sinon détruisez la session persistante
redirect_back_or @user #Rediriger vers la page précédente de l'utilisateur ou par défaut
else
flash.now[:danger] = 'Invalid email/password combination' #Afficher un message flash et le désactiver lorsqu'une nouvelle demande se produit
render 'new' #Nouvelle sortie de vue
end
end
Error:
UsersLoginTest#test_login_with_remembering:
NoMethodError: undefined method `remember_token' for nil:NilClass
test/integration/users_login_test.rb:60:in `block in <class:UsersLoginTest>'
rails db: seed vide les exemples de données dans `` `` db / seedss.rb
dans la base de données.
--Lorsque vous exécutez render @ users '', il fait automatiquement référence au partiel
_user.html.erb '' et affiche chaque utilisateur comme une collection.
--Lorsque vous ajoutez un attribut admin booléen à votre modèle utilisateur, une méthode qui renvoie un objet logique appelé admin est automatiquement ajoutée.Flux d'activation utilisateur
assigns
Les méthodes vous permettent d'accéder aux variables d'instance dans l'action correspondante.
Par exemple, dans l'action
create du contrôleur Users, il y a une variable d'instance `` `@ user
, mais si vous écrivez
ʻassigns (: user)` `` dans le test, elle sera dans la variable d'instance utilisateur. Vous pourrez y accéder.
J'ai eu une erreur lors du test. .. Reportez-vous à cet article sur Teratail et utilisez le code suivant
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
J'ai réussi en faisant ce qui suit ~
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
if @user.activated?
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
-La méthode assigns est une méthode qui teste les variables d'instance du contrôleur. Passez la variable d'instance comme argument en tant que type de symbole. Cela vous donnera accès aux variables d'instance et vous permettra de les tester.
@user = assigns(:user)
■Active Storage Les images peuvent être facilement manipulées en utilisant Active Storage, et le modèle associé aux images peut être librement spécifié. Active Storage est très polyvalent et peut gérer divers fichiers binaires tels que du texte brut, des fichiers PDF et des fichiers audio.
La première chose que vous devez savoir sur l'API Active Storage est la méthode has_one_attached. Ceci est utilisé pour associer le modèle spécifié au fichier téléchargé. has_one_attached peut être utilisé pour associer le modèle spécifié au fichier téléchargé. Dans le cas de has_one_attached, "1 image par Microsoft", Vous pouvez utiliser has_many_attached pour joindre «plusieurs images par Microsoft».
--Rails prend en charge plusieurs index clés
dependant :: destroy``` pour supprimer l'objet associé et lui-même en même temps.
--fitten prend également en charge la création d'objets à l'aide d'associations@user ||= current_user
Le code ci-dessus ne fait rien si
@ user n'est pas nul, et affecte current_user à` `` @ user
s'il est nul.
--has_many: through vous permet de modéliser des relations de données complexes
Méthode | La description |
---|---|
assert_template(expected, message = nil) | Assurez-vous que le modèle spécifié dans l'action est représenté |
assert_not( test, [msg] ) | __test__Mais__false__Vérifier si. |
assert_select "div.nav" | selector(div)Le contenu de l'élément qui correspond à l'égalité d'argument(nav)Vérifiez à |
■ __ "!!" (lu comme "bang bang") __ Un opérateur qui peut convertir un objet en une valeur booléenne. nul sera faux.
>> !!nil
=> false
Tous les autres objets Ruby sont vrais, même zéro.
>> !!0
=> true
■! À propos du point de surprise (point d'exclamation) ◆ En utilisant la marque!, Vous pouvez modifier directement les données (attribut ~ ~). Lorsque vous n'utilisez pas ★!
before_save { self.email = email.downcase }
Lors de l'utilisation de ★!
before_save { email.downcase! }
Vous pouvez lever exception en ajoutant ◆! À une méthode! !!
Exemple avec create, save.
Sans! (Créer une sauvegarde)
-Lorsque le processus est exécuté et que la création / sauvegarde de l'enregistrement échoue, `` nil '' est renvoyé.
Lors de l'ajout! (Créer! Enregistrer!)
Une exception (par exemple, ActiveRecord :: RecordNotFound ERROR
) peut être levée.
■ HTML __type = "email" __ Avec __type = "email" __ en html, appuyez sur le formulaire de saisie depuis votre téléphone mobile pour afficher un clavier spécial optimisé pour votre adresse e-mail.
■ Mot-clé `private
`
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
■ << Opérateur (opérateur de pelle)
<<
Vous pouvez l'ajouter à la fin du tableau avec.
user.following << other_user
Cela a pris un certain temps. .. Cela a pris environ un mois, bien que cela ait été accompagné d'erreurs Cloud9. .. Je pense que cela ne peut pas être aidé parce que c'était assez volumineux, mais il y a des gens qui le terminent plus tôt, donc je finirai de faire Portfolio plus tôt! !!
Merci pour la lecture! !!