2017-02-22 3 views
1

Je lisais des rails et des tutoriels ruby ​​et je commençais tout juste à réaliser mon premier projet. Tout se passe bien mais j'ai un problème pour afficher les erreurs de validation pour les nouveaux utilisateurs. Ceci est mon code du contrôleur:Impossible de montrer les erreurs de validation sur les rails

class UsersController < ApplicationController 

    def new 
    @user = User.new 
    end 
    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to '' 
    else 
     redirect_to '/signup' 
    end 
    end 
    private 
    def user_params 
    params.require(:user).permit(:name, :lastname, :nickname, :email, :password) 
    end 
end 

Et voici ma forme. J'omets toutes les entrées mais le surnom, parce que je suis en train de tester la validation.

<%= form_for(@user) do |f| %> 
    <div class='form-group'> 
     <%= f.text_field :nickname, :placeholder => "User name", :class => "form-control", :required => true, :minlength => "2", :maxlength => "24" %> 
     <div class="text-danger"> 
      <%= @user.errors[:nickname][0] %> 
     </div> 
    </div> 
<% end %> 

je montre que la première erreur liée à voir si elle fonctionne, et éviter tout Ifs qui me font douter si cela fonctionne ou non. La validation de la classe est:

class User < ApplicationRecord 
    has_many :books 
    has_secure_password 
    validates :nickname, uniqueness: true 
end 

Lorsque je crée un nouvel utilisateur par la console et essayer de l'enregistrer avec le même surnom que l'autre, il sauver coutume, si la validation fonctionne très bien. Mais aucune erreur n'est affichée dans la vue, cela revient simplement au formulaire d'inscription et c'est tout. J'utilise ruby ​​2.2.6 et rails 5.0.1. Si quelque chose me manque, faites-le moi savoir.

Répondre

2

lieu de redirect render modèle d'action new:

def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to '' 
    else 
     render 'new' 
    end 
    end 

Lorsque vous vous redirigez lâche objet @user qui contient des erreurs de validation. C'est pourquoi ils ne sont pas visibles dans la vue

+0

Merci beaucoup, Il fonctionne maintenant. –

+1

@FranciscoRupto vous accueillir. Si ma réponse ne vous a pas aidé, n'oubliez pas de la marquer comme acceptée en cliquant sur la coche à côté de la réponse pour passer du creux au vert –

+0

Bien que cela fonctionne parfaitement, j'ai un problème mineur. Lorsque la validation ne passe pas et que #new affiche les erreurs, l'URL affiche "website.com/user". Parce que l'action d'index n'existe pas, si vous rechargez il ne peut pas trouver la page. Comment pourrais-je changer l'URL affichée sur la barre d'adresse? –