1

我一直在阅读 rails 和 ruby​​ 教程,并且刚刚开始我的第一个项目。一切顺利,但我在为新用户显示验证错误时遇到问题。这是我的控制器代码:

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

我只是显示第一个相关错误以查看它是否有效,并避免任何会让我怀疑它是否有效的 Ifs。该类的验证是:

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

当我通过控制台创建一个新用户并尝试使用与另一个不会保存的昵称相同的昵称保存它时,因此验证工作正常。但是视图中没有显示错误,它只是返回到注册表单,仅此而已。我正在使用 ruby​​ 2.2.6 和 rails 5.0.1。如果我缺少任何东西,请告诉我。

4

1 回答 1

3

而不是重定向渲染new操作模板:

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

当您重定向时,您会丢失@user包含验证错误的对象。这就是为什么它们在视图中不可见

于 2017-02-22T14:29:10.273 回答