J'ai ajouté un champ au formulaire d'inscription qui est basé sur un modèle différent, voir Comment utiliser les attributs imbriqués avec le modèle de devise pour les détails sanglants. Cette partie fonctionne bien.
Le problème est maintenant que lorsque j'enregistre, il échoue dans l'action de création du contrôleur des inscriptions qui est fournie par devise avec un Activerecord::UnknownAttributeError
sur ce champ (entreprise).
Je suppose que j'ai besoin de remplacer le contrôleur des enregistrements, ou y a-t-il un moyen meilleur / plus facile de l'aborder?
ruby-on-rails
devise
Craig McGuff
la source
la source
Réponses:
Dans votre formulaire, transmettez-vous d'autres attributs via une affectation en masse qui n'appartiennent pas à votre modèle utilisateur ou à l'un des modèles imbriqués?
Si c'est le cas, je crois que l'ActiveRecord :: UnknownAttributeError est déclenchée dans cette instance.
Sinon, je pense que vous pouvez simplement créer votre propre contrôleur, en générant quelque chose comme ceci:
Et puis dites à devise d'utiliser ce contrôleur au lieu de la valeur par défaut avec:
la source
rails generate devise:views
et dans Rails 2 (je pense) c'est:script/generate devise:views
paths.app.views << "app/views/devise"
dans votreconfig/application.rb
.Une manière meilleure et plus organisée de remplacer les contrôleurs et les vues Devise à l'aide des espaces de noms:
Créez les dossiers suivants:
Placez tous les contrôleurs que vous souhaitez remplacer dans app / controllers / my_devise et ajoutez un
MyDevise
espace de noms aux noms de classe de contrôleur.Registrations
exemple:Modifiez vos itinéraires en conséquence:
Copiez toutes les vues requises dans le
app/views/my_devise
dossier Devise gem ou utilisezrails generate devise:views
, supprimez les vues que vous ne remplacez pas et renommez ledevise
dossiermy_devise
.De cette façon, vous aurez tout bien organisé dans deux dossiers.
la source
create
méthode de Devise que j'ai écrasé. Mon contrôleur créé par échafaudage que j'ai modifié fonctionne très bien, mais comment le faire fonctionner avec lesresource
activités de Devise ?MyDevise::RegistrationsController < Devise::RegistrationsController
crée une erreur de dépendance circulaire. Est-ce que je fais quelque chose de mal?Je pense qu'il y a une meilleure solution que de réécrire le RegistrationsController. J'ai fait exactement la même chose (j'ai juste Organisation au lieu de Compagnie).
Si vous définissez correctement votre formulaire imbriqué, au niveau du modèle et de la vue, tout fonctionne comme un charme.
Mon modèle d'utilisateur:
Mon modèle d'organisation:
Mon point de vue: 'devise / registrations / new.html.erb'
la source
resource
dans la vue au lieu d'une variable d'instance de classe@resource
?Vous pouvez générer des vues et des contrôleurs pour personnaliser la conception.
Utilisation
et
Il copiera des contrôleurs et des vues particuliers de gem dans votre application.
Ensuite, dites au routeur d'utiliser ce contrôleur:
la source
Méthodes très simples Il suffit d'aller dans le terminal et le type suivant
Suivant pour utiliser des vues personnalisées
maintenant dans votre fichier route.rb
Vous pouvez également ajouter d'autres contrôleurs. Cela permettra d'utiliser des contrôleurs dans le dossier des utilisateurs et des vues dans le dossier des utilisateurs.
Vous pouvez maintenant personnaliser vos vues selon vos désirs et ajouter votre logique aux contrôleurs dans le dossier contrôleurs / utilisateurs. Prendre plaisir !
la source