2017-10-02 1 views
0

J'ai l'inscription Ajax avec Rails 5 et Devise. Ceci est registrations_controller.rb:Devise, Rails 5, erreurs personnalisées pour l'email

build_resource(sign_up_params) 
byebug 
    if resource.save 
     if resource.active_for_authentication? 
      sign_up(resource_name, resource) 
      return render :json => {:success => true} 
     else 
     expire_data_after_sign_in! 
      return render :json => {:success => true} 
     end 
    else 
     return render :json => {:success => false} 
    end 

Avec byebug lorsque je tente de vous inscrire avec le courrier électronique qui existent et débogage avec tapant resource.errors, je vois:

<ActiveModel::Errors:0x00000007254a48 @base=#<User id: nil, email: "[email protected]", role_id: 0, created_at: nil, updated_at: nil>, @messages={:email=>["has already been taken"]}, @details={:email=>[{:error=>:taken, :value=>"[email protected]"}]}>

Si je tape dans la console resource.errors.messages, je vois ceci:

{:email=>["has already been taken"]}

Je sais comment obtenir le message ou un ensemble pour l'exemple:

if resource.errors.details[:email][0][:error] == :taken 
    return render :json => {:error=> "Email already in use."} 
end 

ou ajouter dans le modèle user.rb:

validate :email_uniqueness 

def email_uniqueness 
    self.errors.add(:email, 'Email is already in use') if User.where(:email => self.email).exists? 
end 

, mais je veux changer par défaut message d'erreur. J'ai cherché dans tout le projet pour ce message, mais je n'ai rien trouvé. Comment puis-je modifier le message d'erreur dans Devise, lorsque le courrier électronique est déjà utilisé?

+0

Avez-vous extrayez les fichiers locaux? – Anton

Répondre