[RUBY] tutoriel rails Chapitre 10

introduction

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.

Chapitre 10 Mise à jour / Affichage / Suppression de l'utilisateur

10.1.1 Formulaire d'édition

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?

10.2.3 Transmission amicale

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

10.3.2 Exemple d'utilisateur

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.

10.3.3 Nation de page

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.

10.3.5 Refactoring partiel

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.

À la fin

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

tutoriel rails Chapitre 6
tutoriel rails Chapitre 1
tutoriel rails Chapitre 7
tutoriel rails Chapitre 5
tutoriel rails Chapitre 10
tutoriel rails Chapitre 9
tutoriel rails Chapitre 8
Tutoriel Rails Chapitre 3 Apprentissage
Mémorandum du didacticiel Rails (Chapitre 3, 3.1)
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
tutoriel sur les rails
[Tutoriel Rails Chapitre 4] Rubis à saveur de Rails
Test du tutoriel sur les rails
[Tutoriel Rails Chapitre 5] Créer une mise en page
Tutoriel Rails Memorandum 2
Tutoriel de mastication des rails [Chapitre 2 Application jouet]
[Débutant] Tutoriel Rails
Tutoriel Rails (4e édition) Mémo Chapitre 6
Tutoriel Rails 6e édition Résumé d'apprentissage Chapitre 10
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 4
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 9
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 6
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 5
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 2
Tutoriel Rails Chapitre 0: Apprentissage préliminaire des connaissances de base 5
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
Rails Tutorial 6e édition Résumé d'apprentissage Chapitre 8
Rubis aromatisé aux rails
Fiche technique du didacticiel Rails
rails Tutorial Fighting Record III
Tutoriel Rails Chapitre 1 De zéro au déploiement [Essayer]
Tutoriel de mastication des rails [Chapitre 3 Création de pages presque statiques]
Résoudre Gem :: FilePermissionError lors de l'exécution de rails d'installation de gem (Tutoriel Rails Chapitre 1)
11.1 Ressource AccountActivations: Mémorandum du didacticiel Rails - Chapitre 11
Registres du didacticiel Rails et mémorandum n ° 0
J'ai essayé Rails débutant [Chapitre 1]
Tutoriel Rails 4e édition: Chapitre 1 De zéro au déploiement
Résoudre ActiveRecord :: NoDatabaseError lors du test des rails (Tutoriel Rails Chapitre 3)
J'ai essayé Rails débutant [Chapitre 2]