Enregistrement de champs personnalisés dans un modèle utilisateur dans les rails 4
J'ai fait un dispositif de modèle d'Utilisateur et ajouté des champs supplémentaires. Lors de la création de compte et tout fonctionne très bien, seul avec e-mail, tp et tp conf.
Je veux permettre à l'utilisateur d'aller modifier la page et remplissez les champs supplémentaires facultatifs.
Mais, lorsqu'ils soumettent, tout est enregistré en tant que néant.
class RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in){ |u| u.permit(:email, :password) }
devise_parameter_sanitizer.for(:sign_up){ |u| u.permit(:name, :username, :about, :email, :password, :password_confirmation)}
devise_parameter_sanitizer.for(:account_update){ |u| u.permit(:name, :username, :about, :email, :password, :password_confirmation) }
end
def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
if resource.update_with_password(user_params)
if is_navigational_format?
flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ? :update_needs_confirmation : :updated
set_flash_message :notice, flash_key
end
sign_in resource_name, resource, :bypass => true
respond_with resource, :location => after_update_path_for(resource)
else
clean_up_passwords resource
respond_with resource
end
end
def user_params
params.require(:user).permit(:email, :password, :current_password, :password_confirmation, :name, :username, :about)
end
end
- Je obtenir cette sortie dans la console,
ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by Devise::RegistrationsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"EG8FtCTBohuG2uwUvIqmY7KTsmYY1nMAXqTfc0Li+eQ=",
"user"=>{"email"=>"[email protected]", "name"=>"Aaron", "username"=>"", "about"=>"",
"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update"}
User Load (2.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]]
Unpermitted parameters: name, username, about
Mais rien n'est enregistré dans la base de données lorsque je vérifie dans la console (avec l'Utilisateur.la dernière). Je suis coincé, et ont cherché et n'ont aucune idée de ce qui est faux...
source d'informationauteur crentist
Vous devez vous connecter pour publier un commentaire.
Dans Rails4 nous avons de fortes paramètres de manière veuillez
Ajoutez la ligne suivante à votre application_controller.rb
Après avoir travaillé sur quelque chose de semblable à cela, je me suis installé sur l'utilisation du Contrôleur d'Application, puis par la suite constaté que le dispositif de la Documentation est assez simple pour les ce dans leur forte section paramètres et donne une alternative à l'utilisation du Contrôleur d'Application. https://github.com/plataformatec/devise#strong-parameters
Ci-dessous est l'approche avec Contrôleur d'Application qui a fonctionné pour moi.
Cela devrait fonctionner de la même et directement remplace les méthodes de
Devise::RegistrationController
.D'abord produire un nouveau champ.
pour référence
http://guides.rubyonrails.org/migrations.html
Avez-vous d'ajouter votre nouveau champs dans de l'utilisateur paramètre du contrôleur?
Dans le contrôleur de l'application
Dans votre formulaire d'inscription qui remplacent concevoir ajouter cette
Après que ajouter votre nouveau champs dans tous les points de vue _form,afficher,modifier,index.
Dans les Rails 4.2, c'est la façon dont je l'ai fait.
J'ai de l'Utilisateur Modèle sur lequel dispositif est appliqué.
Utilisez cette commande "rails de générer concevoir:les contrôleurs des utilisateurs" pour générer personnalisé contrôleurs.
J'ai ajouté "nom d'utilisateur" nom de l'attribut à mon Modèle d'Utilisateur
Dans mon contrôleur
Dans Les Itinéraires