Il s'agit d'une liste de contrôle lorsque le formulaire n'est pas enregistré dans la base de données même s'il est rempli dans cet état. Je vais omettre les détails des colonnes existantes dans la table des utilisateurs.
Voyons si le modèle a des contraintes étranges.
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
Voyons s'il y a des restrictions étranges lors de la création de la table.
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 n'a pas de paramètres forts, vous utiliserez donc plutôt devise_parameter_sanitizer. Il me manquait une colonne. Revoyons. Plus précisément, j'ai oublié d'autoriser la colonne e-mail, mais lorsque je l'ai exécutée dans le terminal, comme le montre cette image, elle a été ROLLBACKed après l'e-mail, alors j'ai remarqué quelque chose de suspect à ce sujet. ..
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
Peu importe si une seule table est créée, mais s'il y a plusieurs tables, has_many pluriel, stretchs_to singular, etc.
En fin de compte, c'était la cause. C'est une colonne de la table des utilisateurs dans devise (encryped_password par défaut), mais lorsque vous entrez le mot de passe et le mot de passe de form_with, vous devez écrire les noms de colonne comme password et password_confimation, respectivement. Ceci est dû au fait que l'appareil possède une fonction qui vérifie si password et password_confimation sont identiques et renvoie une chaîne cryptée àclos_password s'ils sont identiques.
<%= form_with model: @user, url: user_registration_path, local: true do |f| %>
<div class="field">
<%= f.label :encryped_password, "Mot de passe (6 caractères ou plus)" %><br />
<%= f.password_field :encryped_password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :encryped_password, "Retaper le mot de passe" %><br />
<%= f.password_field :encryped_password, autocomplete: "new-password" %>
</div>
Ce qui suit est omis
<%= form_with model: @user, url: user_registration_path, local: true do |f| %>
<div class="field">
<%= f.label :password, "Mot de passe (6 caractères ou plus)" %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Retaper le mot de passe" %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
Ce qui suit est omis
Cela s'est produit ailleurs auparavant, mais il est possible que le logiciel qui visualise la base de données (Sequel Pro dans mon cas) ait été enregistré après le redémarrage, veuillez donc vérifier.
c'est tout
Recommended Posts