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.
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.
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
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
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" %>
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 %>
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."
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