Dies ist eine Checkliste, wenn das Formular nicht in der Datenbank gespeichert ist, auch wenn es in diesem Zustand ausgefüllt ist. Ich werde die Details darüber weglassen, welche Spalten in der Benutzertabelle vorhanden sind.
Mal sehen, ob das Modell seltsame Einschränkungen hat.
user.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true
validates :profile, presence: true
validates :occupation, presence: true
validates :position, presence: true
Mal sehen, ob es beim Erstellen der Tabelle merkwürdige Einschränkungen gibt.
devise_create_users.rb
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :name
t.text :profile
t.text :occupation
t.text :position
devise hat keine starken Parameter, daher verwenden wir stattdessen devise_parameter_sanitizer. Mir fehlte eine Spalte. Lassen Sie uns überprüfen. Insbesondere habe ich vergessen, die E-Mail-Spalte zuzulassen, aber als ich sie im Terminal ausführte, wie in diesem Bild gezeigt, wurde sie nach der E-Mail rückgängig gemacht, sodass ich etwas Verdächtiges daran bemerkte. ..
application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [ :email, :encrypted_password, :name, :profile, :occupation, :position])
end
end
Es spielt keine Rolle, ob nur eine Tabelle erstellt wird, aber wenn es mehrere Tabellen gibt, has_many Plural, stretchs_to Singular usw.
Am Ende war dies die Ursache. Es ist eine Spalte der Benutzertabelle in devise (standardmäßig encryped_password). Wenn Sie jedoch form_with password und password erneut eingeben, müssen Sie die Spaltennamen als password bzw. password_confimation schreiben. Dies liegt daran, dass devise über eine Funktion verfügt, die überprüft, ob Kennwort und Kennwortkonfiguration identisch sind, und eine verschlüsselte Zeichenfolge an eingeschlossenes Kennwort zurückgibt, wenn sie identisch sind.
<%= form_with model: @user, url: user_registration_path, local: true do |f| %>
<div class="field">
<%= f.label :encryped_password, "Passwort (6 Zeichen oder mehr)" %><br />
<%= f.password_field :encryped_password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :encryped_password, "Kennwort erneut eingeben" %><br />
<%= f.password_field :encryped_password, autocomplete: "new-password" %>
</div>
Folgendes wird weggelassen
<%= form_with model: @user, url: user_registration_path, local: true do |f| %>
<div class="field">
<%= f.label :password, "Passwort (6 Zeichen oder mehr)" %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Kennwort erneut eingeben" %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
Folgendes wird weggelassen
Es ist schon woanders passiert, aber es ist möglich, dass die Software, die die Datenbank visualisiert (in meinem Fall Sequel Pro), nach dem Neustart tatsächlich gespeichert wurde. Überprüfen Sie dies daher bitte.
das ist alles
Recommended Posts