Не могу показать ошибки проверки на рельсах

Я читал учебники по рельсам и рубину и только начал свой первый проект. Все идет хорошо, но у меня проблема с отображением ошибок валидации для новых пользователей. Это мой код контроллера:

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

И это моя форма. Я опускаю все входные данные, кроме псевдонима, потому что я проверяю проверку с его помощью.

<%= 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 %>

Я просто показываю первую связанную ошибку, чтобы увидеть, работает ли она, и избегаю любых If, которые заставили бы меня усомниться в том, работает она или нет. Проверка по классу:

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

Когда я создаю нового пользователя через консоль и пытаюсь сохранить его под тем же псевдонимом, что и другой, он не сохранит его, поэтому проверка работает нормально. Но ошибка не отображается в представлении, она просто возвращается к форме регистрации, и все. Я использую ruby ​​2.2.6 и rails 5.0.1. Если я что-то упустил, дайте мне знать.

1 ответ

Решение

Вместо перенаправления рендера new шаблон действия:

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

Когда вы делаете перенаправление, вы теряете @user объект, который содержит ошибки проверки. Вот почему они не видны в поле зрения

Другие вопросы по тегам