Je souhaite déplacer ma méthode downcase_email hors de ma classe User car plusieurs classes doivent être redimensionnées. Je ne suis pas sûr si c'est la bonne approche, mais j'ai créé un module et déplacé la méthode dedans.Comment faire pour référencer les attributs de modèle dans les méthodes d'instance de module dans RoR 5
class User < ApplicationRecord
include ModelUtilities
before_save :downcase_email
# downcase_email was previously here
#
# def downcase_email
# self.email = email.downcase
# end
end
fichier
dans lib/model_utilities.rb
module ModelUtilities
def downcase_email
self.email = email.downcase
end
end
Quand je lance le code, je reçois l'erreur suivante:
NoMethodError (undefined method `downcase' for nil:NilClass):
lib/model_utilities.rb:6:in `downcase_email'
Toute aide serait appréciée!
'self.email = email.downcase si email.present? '. Aussi, il vaut mieux utiliser le rappel 'before_validation', pas' before_save'. Et ne downcasing que si le courrier électronique est chaged, pas tout le temps. 'before_validation: downcase_email, si:: email_changed?' – chumakoff
@xlembouras C'est. L'erreur serait sur "include" si c'était le problème :) – P0lska
vérifier ce qui vient en soi et utiliser self.email.downcase au lieu de email.downcase –