【问题标题】:rails validations error messages not workingrails 验证错误消息不起作用
【发布时间】:2019-09-02 05:08:16
【问题描述】:

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

我已经通过布局视图和助手尝试了错误消息,但没有一个有效或太混乱而无法理解。

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

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

【问题讨论】:

    标签: ruby-on-rails ruby validation


    【解决方案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

    【讨论】:

    • 有用的提示,但它似乎没有解决我的问题
    • 您能分享一下您现在面临的问题吗
    • 我没有遇到任何错误,只是当我尝试验证用户电子邮件或密码时没有显示错误@Manoj Menon
    • 您还在视图中使用 form_tag 吗?
    • 是的,我正在更改我的问题以显示它
    【解决方案2】:

    您需要将您的 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,您可以在其中做任何您喜欢的事情(正式表单将呈现红色边框和错误消息输入旁边)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多