MST

星途 面试题库

面试题:Ruby on Rails表单处理之数据验证

在Ruby on Rails项目中,使用表单收集用户的邮箱信息。请描述如何在模型层对邮箱格式进行验证,确保输入的是有效的邮箱地址,同时说明如果验证失败,如何在视图层向用户显示友好的错误提示信息。
37.1万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

模型层邮箱格式验证

在Ruby on Rails项目的模型层,可以使用validates_format_of方法对邮箱格式进行验证。假设模型名为User,代码如下:

class User < ApplicationRecord
  validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, message: "请输入有效的邮箱地址"
end

上述代码中,validates_format_of方法的第一个参数是要验证的属性emailwith参数后面跟着一个正则表达式,用于匹配邮箱的格式。message参数设置验证失败时显示的错误信息。

视图层显示错误提示信息

在视图层(例如views/users/new.html.erbviews/users/edit.html.erb),Rails提供了内置的机制来显示错误提示信息。通常在表单中使用form_with(或旧版本的form_for)来创建表单,并且可以通过@user.errors来获取模型验证失败的错误信息。示例代码如下:

<%= form_with(model: @user, local: true) do |form| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
      <ul>
        <% @user.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :email %>
    <%= form.text_field :email %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

上述代码中,首先通过@user.errors.any?判断是否有错误,如果有,则遍历@user.errors.full_messages并在无序列表中显示每一条错误信息。这样当邮箱格式验证失败时,用户就可以看到友好的错误提示信息。