10--Rails数据交互2

模型类就是ActiveRecord,通过上节课我们可以通过微博应用正常地去添加用户了比如sundi,但是有两个大问题:

  1. 添加的时候没有对添加的字段内容作任何形式的验证
  2. 没有可视化界面让用户很方便地区添加新用户,我们用的是rails的控制台

这节课我们着手去解决第一个问题,就是Rails中模型类ActiveRecord的数据验证问题。

我们先进入rails控制台

这次我们仿造上节课的方法再次创建一个对象,不过这次我们不在new后面添加参数。

这时我们来看一下,可以看到新用户的用户名和邮箱都是空的:

通过这个例子可以知道,因为没有验证所以创建用户没有任何形式验证,这样你创建了完全没用的空用户显然是不合理的。所以我们需要rails的验证机制,我们输入格式错误就不予创建并给出提示。

  1. 首先用户名和邮箱的内容不能为空
  2. 用户名必须为字符串,并且长度不能太长,一般规定20个字符
  3. 邮箱格式符合基本的邮箱格式规范
  4. 最后我们希望把邮箱作为用户的唯一标识,不同用户不能拥有相同的邮箱

如上,用户模型需要四种验证:存在性验证,程度验证,格式验证,唯一性验证

数据验证的关键字是validates,而存在性验证有它特有的参数presence

存在性验证就是检查对应的字段属性是否为空

使用就是打开模型文件,如下:

编辑之后为:

添加数据验证关键词validates(必须与第一个冒号中间用空格隔开),后面跟上要验证的字段,在后面跟上要验证的方法叫presence:true表示一定要存在

上面这样写可能比较难理解,其实ruby语言就是这样,方法的括号可以不写,validates就是方法,后面都是参数,如下加上括号也可以:

添加完这部分代码,我们在创建新用户的时候rails就会对userName这个字段进行验证。

我们先退出下然后控制台重进:

添加了数据验证之后,new方法不报错,但是可以看到save方法返回结果是false也就是失败

我们查看下相关的错误信息:

错误信息就是Username不能为空,这就说明数据验证生效了

我们同理可以给邮箱添加验证,

到这里我们就完成了存在性验证,下面完成长度性验证,直接在后面补上长度性验证特有参数length使用如下

注意legth后面使用花括号是因为长度限制有最大最小限制等不止一种限制,多个参数所以用花括号括起来。这里只是设置最大长度20个字符。

我们还是先退出再重进控制台:

同理给邮箱加上长度验证

接下来我们要给邮箱添加格式验证和唯一性验证

格式验证特有参数是format,花括号的with后面是格式的正则表达式

我们还是先退出再重进控制台来试验一下:

invalid翻译就是不合法。

接下来就是唯一性验证,特有参数是uniqueness

太长我们加个逗号再换行输入

但是rails默认验证大小写不同,也就是大写的邮箱和小写的邮箱,rails会认为是两个不同的东西,这样肯定是不行的。所以需要唯一性验证添加上大小写不敏感。

case_sensitive就是大小写敏感,为false表示不区分大小写即不敏感
				

?

?

?

?

?

?

?

时间: 2024-10-25 02:16:22

10--Rails数据交互2的相关文章

UMI学习-10 Dva 与后台数据交互

明天在线办公没时间学习了,今天晚上再更新一篇 代码提交一次:https://github.com/zhaogaojian/jgdemo 1.src下创建services目录 创建文件userSrv.ts export async function query(): Promise<any> { return request('user/getuserinfo'); } import axios from "axios" export default async functi

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处! 一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原生APP中的使用越来越广泛,也就是我们常说的混合开发(Hybrid APP).最新很火的微信小程序相信大家都是知道的,实际上微信小程序加载的界面就是一个HTML5的界面,HTML5界面在一些电商类的APP中主要承担展示数据的作用,但是他的作用并不仅限于此,最起码js调用原生方法和原生调用js的方法是

JavaScript模板引擎实现数据交互

经过1年的磨练,近期终于稍微明白到,前端是怎么做到企业要求的:数据交互. 1,ajax+json这个是必须学的,但没问题,我们可以通过这个博客来慢慢了解怎么回事? 2,可以通过JS框架和JS模板来实现,但最后还是要用到ajax+json的. 注意:个人建议 假如项目页面数量是少于50-100个的,那么推荐使用JS模板:如果大于100个的用JS框架.各有各优势嘛. 今晚的博客分几次写完,看到这句话删除就证明已经写完了. 先分享JS模板的内容:我这次推荐使用百度的模板引擎,因为他比腾讯的art运行速

springMVC学习(11)-json数据交互和RESTful支持

一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交互 1)环境准备: 加载json转换的jar包: springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转) jackson-core-asl-1.9.11.jar jackson-mapper-asl-1.9.11.

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

第6课第2节_Binder系统_驱动情景分析_打印数据交互过程

添加宏: 功能:把NAME(n) 中的n作为字符串返回,eg:BR_NOOP作为字符串返回 BR开头:Binder--->IPC BC开头:IPC------>Binder #define NAME(n) case n: return #n const char *binder_cmd_name(uint32_t cmd) { switch(cmd) { NAME(BR_NOOP); NAME(BR_TRANSACTION_COMPLETE); NAME(BR_INCREFS); NAME(B

php 接口与前端数据交互实现

最近在做前后端数据交互的尝试,也跳了很多坑,使用的是php+bootstrap-table+js,把一些收获记录在这里,方便查询. 这个小项目,仅有3个文件,分别为: crud.html data.php crud.sql 数据交互实现1:查询 mysql 数据库建表 php查询接口 前端数据展现 mysql 数据库建表 数据库名称:crud 第一个表名:t_users 主键:user_id,自增长排列 php: <?php //测试php是否可以拿到数据库中的数据 /*echo "444

TCP移动端跟服务器数据交互

同一台笔记本下的客户端和服务端 TCPClient 客户端: //  RootViewController.h#import <UIKit/UIKit.h>#import "AsyncSocket.h"  //封装了基于tcp协议的socket编程//tcp协议是位于网络传输层的协议,规定客户端与服务端之间.或者是客户端与客户端之间数据通信的方式//每个客户端或者服务端通过ip地址+端口来标识/*客户端与服务端基于tcp协议进行数据通信 *1.客户端需要通过ip+端口连接指

X-Plane数据交互

要用X-Plane进行二次开发,免不了需要进行参数的传递,下面我们来看看与X-Plane进行数据交互都有哪些方式 一.X-Plane原生支持的通信方式 1.通过Plugin进行数据交互 2.通过UDP进行通信 XXXX\X-Plane 10\Instructions\Sending Data to X-Plane.rtf目录下TXT.rtf 文档. 二.第三方通信工具 1.GitHub上的开源项目 1)NASA的X-Plane Connect(https://github.com/nasa/XP

困扰几周了,请教啊,android与websevice数据交互很诡异的问题

============问题描述============ 传输数据(title,imgurl,account)当传输title或title+account时数据正常传输,但是无法传输Imgurl项,即使imgurl+title都一样,没有任何数据显示 请教 1.httpcon.java复制内容到剪贴板代码: //数据交互,输入输出流与读取流 import java.io.IOException; import java.io.InputStream; import java.io.OutputS