Не могу показать ошибки проверки на рельсах
Я читал учебники по рельсам и рубину и только начал свой первый проект. Все идет хорошо, но у меня проблема с отображением ошибок валидации для новых пользователей. Это мой код контроллера:
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
объект, который содержит ошибки проверки. Вот почему они не видны в поле зрения