[RAILS] Die Gerätefehlermeldung wird nicht richtig angezeigt.

Überblick

Die Fehlermeldung wurde nicht gut angezeigt, daher habe ich herausgefunden, warum. Es ist keine Lösung, aber ich habe ein wenig darüber gelernt, wie Decvise funktioniert, also werde ich es als Memorandum belassen.

Lösung

Beim Aufrufen einer Teilvorlage wurde der Variablenname in der Vorlage von "Ressource" in "@ Modellname" geändert.

Fehlermeldung


<%= render "devise/shared/error_messages", resource: resource %>
↓
<%= render "devise/shared/error_messages", resource: @profile %>

Da devise ein Framework ist, das mehrere Modellinstanzen verarbeiten kann, scheint es, dass die Ressource damit gut umgehen kann. ](Https://teratail.com/questions/139633) Eigentlich scheint es einen anderen Prozess zu geben, aber wenn ich dies in "@ model name" geändert habe, hat es funktioniert.

Anderer Code

Routing

Da die Benutzerregistrierung und die Profilregistrierung in einem Assistentenformat vorliegen, wird das Profil vom Controller "Benutzer / Registrierung" verarbeitet.

routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  devise_scope :user do
    get 'profiles', to: 'users/registrations#new_profile'
    post 'profiles', to: 'users/registrations#create_profile'
  end
end

Tischgestaltung

Ich verwende devise, um Benutzerinformationen in den Benutzer- und Profiltabellen zu speichern.

schema.rb


#Die Benutzertabelle und die Profiltabelle sehen folgendermaßen aus.

  create_table "profiles", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "favorite_beer"
    t.text "twitter_link"
    t.text "info"
    t.bigint "user_id", null: false
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["user_id"], name: "index_profiles_on_user_id"
  end

  
  create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "nickname", null: false
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

Eingabeformular

Die Ansicht der Profilregistrierung sieht folgendermaßen aus. Die Fehlermeldung wird hier in der Teilvorlage aufgerufen, aber es scheint, dass die Informationen in der Profiltabelle nicht an sie übergeben werden konnten.

new_profile


<h2>Profilregistrierung</h2>
<%= form_with model: @profile, local: true do |f| %>
  <%= render "devise/shared/error_messages", resource: @profile %>

  <div class="field">
    <%= f.label :avatar %><br />
    <%= f.file_field :avatar %>
  </div>

  <div class="field">
    <%= f.label :favorite_beer %><br />
    <%= f.text_field :favorite_beer, autofocus: true, autocomplete: "favorite_beer" %>
  </div>

  <div class="field">
    <%= f.label :twitter_link %><br />
    <%= f.text_field :twitter_link, autocomplete: "twitter_link" %>
  </div>

  <div class="field">
    <%= f.label :info %><br />
    <%= f.text_area :info %>
  </div>

  <div class="actions">
    <%= f.submit "Anmelden" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

Anrufer der Fehlermeldung

Die in der Teilvorlage aufgerufene Fehlermeldung lautet wie folgt

erb:divese/shared/_error_messages.html.erb


<% if resource.errors.any? %>
<%#Zur Ressource dieses ↑ Teils@Profil bestanden%>
  <div id="error_explanation">
    <h2>
      <%= I18n.t("errors.messages.not_saved", #Die Beschreibung hier ist erfunden.ja.Beschrieben in yml
                 count: resource.errors.count,
                 resource: resource.class.model_name.human.downcase)
       %>
    </h2>
    <ul>
      <% resource.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

Eine Datei, die Geräte ins Japanische übersetzt

Da devise bereits ins Japanische übersetzt wurde, wird die yml-Datei auch ins Japanische übersetzt.

yml:config/locales/devise.ja.yml


ja:
  activerecord:
    attributes:
# ~Kürzung~     
    models:
      user:Nutzer
      profile:Profil#Ich habe es hinzugefügt, weil ich es auch ins Japanische übersetzen wollte.
# ~Kürzung~
  errors:
    messages:
      already_confirmed:Ist bereits registriert. Bitte loggen Sie sich ein.
      confirmation_period_expired:Abgelaufen.%{period}Sie müssen bis bestätigen. Bitte stellen Sie eine neue Anfrage.
      expired:Abgelaufen. Bitte stellen Sie eine neue Anfrage.
      not_found:Wurde nicht gefunden.
      not_locked:Ist nicht gefroren.
#Das ist nicht_Es scheint, dass der gespeicherte Ort von der Teilvorlage aufgerufen wird
      not_saved:
        one:Weil ein Fehler aufgetreten ist%{resource}Wurde nicht gespeichert.
        other: "%{count}Weil ein Fehler aufgetreten ist%{resource}Wurde nicht gespeichert."

Zusammenfassung

Ich möchte auch in Zukunft weiter studieren. Wenn dieser Satz ein lächerliches Missverständnis enthält, weisen Sie bitte darauf hin.

Recommended Posts

Die Gerätefehlermeldung wird nicht richtig angezeigt.
[Fehler] Die App wird in der Produktionsumgebung nicht angezeigt
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
Wenn das Projekt nicht in Eclipse angezeigt wird
Wenn die Erstellungsaktion fehlschlägt, wird keine Fehlermeldung angezeigt
"tx" ist kein gebundener Fehler
[Rails] fields_for wird nicht angezeigt
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
Der endgültige Überschreibungsfehler von [Java] wird zur Kompilierungszeit nicht angezeigt
[Rails] Was war die Fehlermeldung?
Informationen zum Problem, dass das Image nach der AWS-Bereitstellung nicht angezeigt wird
Das Repository ... ist kein signierter Fehler im Docker Build Apt-Get Update
Wie die Website auf dem Bildschirm angezeigt wird
Das Bild wird in der Produktionsumgebung nicht angezeigt
Erhalten Sie eine Fehlermeldung mit einer beliebigen Methode
Hinzufügen, wenn nicht in Set, Fehlermeldung, wenn
[Cloud9] Yay! Du bist auf Schienen! Wird im Schienen-Tutorial nicht angezeigt
[Schienen] Was tun, wenn das Refile-Bild beim Schreiben der Verarbeitung zum Zeitpunkt des Routing-Fehlers nicht angezeigt wird?
Wenn die JDK-Version in Eclipse korrekt ist, aber ein Fehler auftritt oder der Compiler nicht ordnungsgemäß funktioniert
Möglichkeit bei der Bereitstellung auf EC2, aber im Fehlerprotokoll wird nichts angezeigt
[Java] Lesen Sie die Fehlermeldung richtig? [Lesen des Stack-Trace]
Der ActiveSupport-Unterstrich ist nicht die inverse Konvertierung von camelize
Der Weg zur Japanisierung von Rails führt zu Fehlermeldungen
[Rails] Lassen Sie uns die Fehlermeldung ins Japanische übersetzen
Der öffentliche Schlüssel für jenkins-2.249.1-1.1.noarch.rpm ist nicht installiert
[Java] In der Ausgabe wird etwas als "-0.0" angezeigt
Ebean.update () wird im geerbten Modell nicht ausgeführt.
Turbolinks: Ich möchte das Problem lösen, dass JS nicht richtig angezeigt wird, es sei denn, es wird beim Übergang mit link_to neu geladen
[Ruby on Rails] Wenn der Befehl heroku ausgeführt wird, wird der Befehl bash: heroku: nicht gefunden angezeigt. [Rails Tutorial]
[Android Studio] Über die Tatsache, dass die Entwurfsansicht bei Verwendung von TextClock nicht angezeigt wird
Docker Compose startet nicht mit der Fehleranzeige docker.credentials.errors.InitializationError
PATH geht nicht vorbei ... Die Ursache ist der Zeichencode
"Dies ist das falsche Paket! Bitte installieren Sie den Fehler eslint-plugin-jsx-a11y"
Wenn Sie Benutzerinformationen mithilfe der Geräteeinstellungen auf dem Bearbeitungsbildschirm ändern, wenn das Kennwort nicht gespeichert ist
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?