Je publierai le processus de progression du tutoriel sur les rails par moi-même.
Cela touche des mots que je n'ai pas compris dans le processus et des erreurs bloquées.
Veuillez signaler toute erreur car il s'agit d'un résultat d'apprentissage personnel.
Puisqu'il s'agit de mon premier article, je pense qu'il y a beaucoup d'endroits difficiles à lire, mais pardonnez-moi s'il vous plaît.
Exercice 2
ruby:app/views/users/_form.html.erb
#Liste 10.5:Partiel pour les formulaires nouveaux et modifiés
<%= form_with(model: @user, local: true) do |f| %>
<%= render 'shared/error_messages', object: @user %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>
Peut être
object: @user
A été ajouté ... Je pense que vous spécifiez probablement un objet à transmettre à shared / error_messages shared / error_messages est comme ci-dessous
ruby:app/views/shared/_error_messages.html.erb
<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
Je ne pense pas que ce soit nécessaire car j'ai spécifié l'objet @user, mais ...
référence https://teratail.com/questions/112178
Aussi,
<%= f.label :password_confirmation, "Confirmation" %>
Le deuxième argument de est parti ...
J'aurais pu m'attendre à ce que le deuxième argument soit le texte de l'étiquette, mais je l'ai recherché juste au cas où.
référence https://teratail.com/questions/112172
Le texte de l'étiquette est modifié car le deuxième argument n'est plus spécifié. Il est affiché comme confirmation du mot de passe à partir de la confirmation.
Je comprends les deux significations, mais pourquoi a-t-il été fixé silencieusement?
Q. Qu'est-ce qu'un objet de requête? A. request.original_url Renvoie l'URL de la requête actuelle request.get? Renvoie true lorsque la méthode HTTP est GET
référence https://railsguides.jp/action_controller_overview.html#request%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
un problème est survenu !! J'obtiens une erreur lorsque j'exécute des rails db: migrate: reset
Permission denied @ apply2files - C:/environment/sample_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/environment/sample_app/db/development.sqlite3
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)
Je l'ai résolu en me référant à cet article. https://qiita.com/Toshiki23/items/f366504844fd22ad87d9
Je l'ai utilisé comme référence avant. Il semble que Windows ne puisse pas supprimer le fichier auquel il accède.
User.paginate(page: 1)
paginate prend le numéro de page de valeur avec la clé: page User.paginate récupère un morceau de données (30 par défaut) de la base de données en fonction du paramètre: page L'exécution de la commande ci-dessus sur la console affichera l'objet avec le numéro de page 1 (la sortie sera 11, mais en raison de la limite de la console de Active Record lui-même. Vous pouvez contourner cette limitation en appelant la méthode de longueur).
@users = User.paginate(page: params[:page])
Si le paramètre [: page]) vaut 1, 1 à 30 utilisateurs seront récupérés, et si le paramètre [: page]) vaut 2, 31 à 60 utilisateurs seront récupérés et affectés à @users. Au fait, si la page est nulle, paginer renvoie simplement la première page.
ruby:app/views/users/index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
<% @users.each do |user| %>
<%= render user %>
<% end %>
</ul>
<%= will_paginate %>
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
Refactoring supplémentaire.
ruby:app/views/users/index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
Rails devine @users comme une liste d'objets User. De plus, si vous donnez une collection d'utilisateurs et que vous l'appelez, Rails énumérera automatiquement les collections d'utilisateurs et affichera chaque utilisateur comme un partiel _user.html.erb. (tutoriel rails Extrait du chapitre 10)
Encore une fois, une omission difficile pour les débutants ... Voulez-vous dire passer une collection, c'est-à-dire quelque chose comme plusieurs éléments de données?
Je comprends qu'il peut être omis, mais alors dans _user.html.erb
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
Est-il acceptable que l'utilisateur variable créé par chaque méthode reste tel quel, et si oui, quel est le nom de l'utilisateur variable?
Le nom de la variable peut-il être quelque chose? J'ai changé le nom et l'ai testé.
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for aaa, size: 50 %>
<%= link_to aaa.name, user %>
</li>
résultat Erreur.
undefined local variable or method `aaa'
La variable aaa n'est pas définie.
Que peut-on deviner jusqu'ici ① L'objet passé par le rendu est-il automatiquement défini comme une forme singulière? (2) Puisqu'il s'agit d'un objet de la classe User, est-il automatiquement défini avec le même nom?
Comme test
app/controllers/users_controller.rb
def index
@aaas = User.paginate(page: params[:page])
end
ruby:app/views/users/index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
<%= render @aaas %>
</ul>
<%= will_paginate %>
résultat
ActionView::Template::Error: The @users variable appears to be empty. Did you forget to pass the collection object for will_paginate?
La variable @users est vide. Avez-vous oublié de transmettre l'objet de collection à will_paginate? A également été vu.
Le nom de variable de l'objet de collection doit-il donc être @users?
Et vous devrez le passer à will_paginete (un objet de collection nommé @users) ... peut-être ...
Les rails ont-ils un paramètre qui interprète l'objet de collection de l'objet User de différentes manières en le nommant en tant qu'utilisateurs (l'objet de collection est une forme plurielle d'un objet de classe)?
Ce faisant, si le nom de la variable est user, il aura une opération pratique telle que l'énumération automatique de la collection.
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
Dois-je faire ça? Je suppose, mais ...
Bien sûr, ce n'est que lorsque vous écrivez selon les règles pour cela, que cela sera interprété de différentes manières.
Cette fois, c'est un chapitre qui a souffert du refactoring. J'ai laissé quelques parties vagues, je voudrais donc y revenir plusieurs fois et procéder à l'apprentissage pour que je puisse le comprendre clairement.
Recommended Posts