Ich werde den Prozess der Weiterentwicklung des Rails-Tutorials selbst veröffentlichen.
Es berührt Wörter, die ich dabei nicht verstanden habe, und hat Fehler blockiert.
Bitte weisen Sie auf Fehler hin, da diese auf persönlichem Lernen beruhen.
Da dies mein erster Beitrag ist, denke ich, dass es viele Orte gibt, die schwer zu lesen sind, aber bitte verzeihen Sie mir.
Übung 2
ruby:app/views/users/_form.html.erb
#Listing 10:.5:Teilweise für neue und bearbeitete Formulare
<%= 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 %>
Vielleicht
object: @user
Wurde hinzugefügt ... Ich denke, Sie geben wahrscheinlich ein Objekt an, das an shared / error_messages übergeben werden soll shared / error_messages ist wie folgt
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 %>
Ich denke nicht, dass es notwendig ist, weil ich das @ user-Objekt angegeben habe, aber ...
Referenz https://teratail.com/questions/112178
Ebenfalls,
<%= f.label :password_confirmation, "Confirmation" %>
Das zweite Argument von ist weg ...
Ich hätte erwarten können, dass das zweite Argument der Text des Etiketts ist, aber ich habe es für alle Fälle nachgeschlagen.
Referenz https://teratail.com/questions/112172
Der Text der Beschriftung wird geändert, da das zweite Argument nicht mehr angegeben wird. Es wird als Passwortbestätigung aus Bestätigung angezeigt.
Ich verstehe beide Bedeutungen, aber warum wurde es stillschweigend behoben?
Q. Was ist ein Anforderungsobjekt? A. request.original_url Gibt die aktuelle Anforderungs-URL zurück request.get? Gibt true zurück, wenn die HTTP-Methode GET ist
Referenz 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
ein Problem ist aufgetreten !! Ich erhalte eine Fehlermeldung, wenn ich Rails db: migrate: reset ausführe
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)
Ich habe es durch Bezugnahme auf diesen Artikel gelöst. https://qiita.com/Toshiki23/items/f366504844fd22ad87d9
Ich habe es vorher als Referenz benutzt. Es scheint, dass Windows die Datei, auf die es zugreift, nicht löschen kann.
User.paginate(page: 1)
paginieren nimmt Wert Seite Nummer mit Schlüssel: Seite User.paginate ruft einen Datenblock (standardmäßig 30) aus der Datenbank basierend auf dem Parameter: page ab Wenn Sie den obigen Befehl auf der Konsole ausführen, wird das Objekt mit der Seitennummer 1 ausgegeben (die Ausgabe ist 11, jedoch aufgrund der Konsolenbeschränkung von Active Record selbst. Sie können diese Einschränkung umgehen, indem Sie die Längenmethode aufrufen).
@users = User.paginate(page: params[:page])
Wenn params [: page]) 1 ist, werden 1 bis 30 Benutzer abgerufen, und wenn params [: page]) 2 ist, werden 31 bis 60 Benutzer abgerufen und @users zugewiesen. Übrigens, wenn die Seite Null ist, gibt paginate einfach die erste Seite zurück.
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>
Weiteres Refactoring.
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 errät @users als Liste von Benutzerobjekten. Wenn Sie eine Sammlung von Benutzern angeben und aufrufen, listet Rails außerdem automatisch die Sammlungen von Benutzern auf und gibt jeden Benutzer als Teil _user.html.erb aus. (Schienen-Tutorial Zitiert aus Kapitel 10)
Eine weitere schwierige Auslassung für Anfänger ... Meinen Sie damit, eine Sammlung zu übergeben, dh so etwas wie mehrere Daten?
Ich verstehe, dass es weggelassen werden kann, aber dann in _user.html.erb
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
Ist es in Ordnung, dass der von jeder Methode erstellte variable Benutzer unverändert bleibt, und wenn ja, wie heißt der variable Benutzer?
Kann der Variablenname etwas sein? Ich habe den Namen geändert und getestet.
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for aaa, size: 50 %>
<%= link_to aaa.name, user %>
</li>
Ergebnis Error.
undefined local variable or method `aaa'
Die Variable aaa ist nicht definiert.
Was kann bisher erraten werden (1) Wird das vom Rendern übergebene Objekt automatisch als Singularform festgelegt? (2) Da es sich um ein Objekt der Benutzerklasse handelt, wird es automatisch mit demselben Namen festgelegt?
Als 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 %>
Ergebnis
ActionView::Template::Error: The @users variable appears to be empty. Did you forget to pass the collection object for will_paginate?
Die Variable @users ist leer. Haben Sie vergessen, das Sammlungsobjekt an will_paginate zu übergeben? Wurde auch gesehen.
Sollte der Variablenname des Sammlungsobjekts also @users sein?
Und Sie müssten es an will_paginete (ein Sammlungsobjekt namens @users) übergeben ... vielleicht ...
Verfügt Rails über eine Einstellung, die das Sammlungsobjekt des Benutzerobjekts auf verschiedene Weise interpretiert, indem es als Benutzer benannt wird (das Sammlungsobjekt ist eine Pluralform eines Klassenobjekts)?
Wenn der Variablenname Benutzer ist, kann er auf diese Weise bequem die Auflistung automatisch auflisten.
ruby:app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
Muss ich das tun? Ich vermute, aber ...
Natürlich wird es nur dann unterschiedlich interpretiert, wenn Sie nach den Regeln dafür schreiben.
Diesmal war es ein Kapitel, das unter Refactoring litt. Ich habe einige vage Teile hinterlassen, daher möchte ich mehrmals darauf zurückblicken und mit dem Lernen fortfahren, damit ich es klar verstehen kann.
Recommended Posts