J'utilise authlogic pour l'authentification et un trombone pour gérer les pièces jointes des images de profil de l'utilisateur.authlogic current_user tracking
J'utilise la méthode suivante pour obtenir le current_user
def current_user_session
return @current_user_session if defined?
(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session &&
current_user_session.record
end
et le rappel after_save suivant pour régénérer l'image de profil si l'image a changé.
after_save do |user|
if user.image_changed?
Delayed::Job.enqueue ImageJob.new(user.id)
end
end
La méthode current_user émet un appel et UserSession.find En regardant les documents, il semble UserSession.tries pour connecter l'utilisateur dans, ce qui se traduit par une mise à jour à certains domaines (updated_at, jeton, etc., mais pas l'image de profil), ce qui entraîne une sauvegarde de l'enregistrement de l'utilisateur, ce qui dans mon cas se traduit par l'envoi de rappels after_save . Cette sauvegarde après rappel vérifie si a été un changement à l'image de profil de l'utilisateur, ce qui consomme inutilement du temps.
Maintenant, c'est très bien si l'utilisateur est en effet tente de profil de mise à jour, mais depuis que je l'utilise current_user dans de nombreux endroits différents dans mon application, ce rappel est se faisant virer (et son un cher appel), sans raison .
Je comprends que ce n'est pas exactement question authlogic, mais est-il de toute façon je peut éviter cela, à savoir soit pas mettre à jour l'enregistrement de l'utilisateur ou Différencier en quelque sorte entre ce qui est une mise à jour de profil et ce qui est une mise à jour résultant de cette UserSession.find connexion?
Merci
Voici la solution qui a fonctionné basée sur la suggestion de bjg.
before_save: check_what_changed
def check_what_changed si self.changed.sort == [ "last_request_at", "perishable_token"] = true self.skip_profile_update return true autre self.skip_profile_update = false retour vrai fin fin
Mise à jour # 2 Je retire ce que cela ne fonctionne pas, mais ce n'est pas vraiment un problème avec t sa solution, pour une raison quelconque, paperclip tente de sauvegarder les pièces jointes avant même le rappel after_save. Ceci est probablement un problème de paperclip, aucune idée ..
Merci. Les champs modifiés pour les mises à jour authlogic sont en fait ['last_request_at', 'perishable_token'], il y a un autre problème ici, le callback before_save évalué à zéro lors d'une mise à jour régulière et l'appel update_attributes échoue. Je ne peux pas enregistrer un profil régulier avec cette astuce. – badnaam
Cela a fonctionné .. merci pour votre aide! before_save: check_what_changed def check_what_changed si self.changed.sort == [ "last_request_at", "perishable_token"] = true self.skip_profile_update return true autre self.skip_profile_update = false return true fin fin – badnaam