0

Intro: En bref, cette action vous permet d'inviter plus d'utilisateurs par mail, il y a un champ où vous mettez vos emails et sur submit ils reçoivent tous des emails avec invitation par mail.extraire les objets qui n'ont pas passé les validations et les montrer dans les notifications

il existe une méthode dans le modèle qui valide l'e-mail sur project_invitation créer ainsi, l'insertion d'un type de mail invalide (comme: eee @ em, fff.com, bbb @ .com), Pinv ne seront pas sauvés et logger.error sera élevé ..

le problème: Comment puis-je extraire tous les e-mails qui n'ont pas réussi la validation et les afficher dans un avis, quelque chose comme "Invtations envoyé, à l'exception eee @ em, fff .com, bbb @ .com, les e-mails ne sont pas valides ".

Merci, si d'autres informations sont nécessaires, s'il vous plaît faites le moi savoir.

def invite_users 
    emails = params[:project_invitation][:emails] 
    role = current_user.has_role?(:admin, @project) ? :admin : :default 

    emails.to_s.split(',').each do |email| 
     pinv = ProjectInvitation.new(params[:project_invitation], as: role) 
     pinv.sender = current_user 
     pinv.recipient_email = email 
     pinv.recipient = nil 
     pinv.project = @project 

     if pinv.save 
     ProjectMailer.delay.invitation(pinv) 
     else 
     logger.error("Failed to save project inv: #{pinv.errors.full_messages.join("\n")}") 
     end 
    end 
    end 

Répondre

0

capture les e-mails dans votre bloc, au-dessus de votre logger.error:

invalid_emails = [] 

    if pinv.save 
    ProjectMailer.delay.invitation(pinv) 
    else 
    invalid_emails << email 
    logger.error("Failed to save project inv: #{pinv.errors.full_messages.join("\n")}") 
    end 

    if invalid_emails.any? 
    flash[:notice] = "Invalid emails: #{invalid_emails.join(', ')}" 
    end 

Le code complet:

def invite_users 
    emails = params[:project_invitation][:emails] 
    role = current_user.has_role?(:admin, @project) ? :admin : :default 

    invalid_emails = [] 

    emails.to_s.split(',').each do |email| 
     pinv = ProjectInvitation.new(params[:project_invitation], as: role) 
     pinv.sender = current_user 
     pinv.recipient_email = email 
     pinv.recipient = nil 
     pinv.project = @project 

     if pinv.save 
     ProjectMailer.delay.invitation(pinv) 
     else 
     invalid_emails << email 
     logger.error("Failed to save project inv: #{pinv.errors.full_messages.join("\n")}") 
     end 
    end 

    if invalid_emails.any? 
     flash[:notice] = "Invalid emails: #{invalid_emails.join(', ')}" 
    end 
    end 
+0

merci, fonctionne très bien. – rmagnum2002

+0

Bon à entendre :) –

Questions connexes