Rails验证错误消息不起作用

时间:2019-09-02 05:08:16

标签: ruby-on-rails ruby validation

我正在尝试登录并注册页面,但是当我尝试验证电子邮件和密码时,没有弹出错误消息,尽管应该弹出这些消息,但条件不满足。

我已经尝试过通过布局视图和帮助器显示错误消息,但是没有任何效果,或者让我难以理解。

class UsersController < ApplicationController
  def new 
    @user = User.new
  end
  def create
    @user = User.create(password: params[:password], email: params[:email], firstname: params[:firstname], lastname: params[:lastname])
    if @user.save
        redirect_to user_path(@user)
    else
   redirect_to root_path
    end
  end
  def show
    @user = User.find(params[:id])
  end
end

这是我的用户控制器

这是我的用户模型

class User < ApplicationRecord
        has_secure_password
        validates :email, presence: true, uniqueness: true
        validates :password, length: { minimum: 4 }
        validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+ 
 [a-z]{2,})\Z/i, :message => "hollksd"(just for testing)
 end

这是我的新用户视图

  <%= form_for @user do |form| %>
  <p> First name:<%= form.text_field :firstname %></p>
  <p>Last name:<%= form.text_field :lastname %></p>
    <p>Email:<%= form.email_field :email %></p>
      <p>Create password:<%= form.password_field :password %></p>
  <%= form.submit %>
<%end%>

如果有人可以帮助,将不胜感激!

2 个答案:

答案 0 :(得分:1)

似乎您的html元素未与用户模型相关联,请尝试使用form_for标记,如下所示

<%= form_for @user do |form| %>
  <%= form.text_field :first_name %>
  <%= form.text_field :last_name %>
  <%= form.submit %>
<%end%>

也请使用render :new代替redirect_to root_path

答案 1 :(得分:1)

您需要将create操作更新为以下内容:

def create
  @user = User.new(password: params[:password], email: params[:email], firstname: params[:firstname], lastname: params[:lastname])

  if @user.save
    redirect_to user_path(@user)
  else
    render :new
  end
end

为什么new无法保存时呈现?因为我们需要告知该表单无效,并且通过使用@user对象进行渲染,所以您可以访问@user.errors,在这里您可以做任何您想做的事情(正式的表单会渲染红色边框和错误消息旁边的输入。)