模型类就是ActiveRecord,通过上节课我们可以通过微博应用正常地去添加用户了比如sundi,但是有两个大问题:
- 添加的时候没有对添加的字段内容作任何形式的验证
- 没有可视化界面让用户很方便地区添加新用户,我们用的是rails的控制台
这节课我们着手去解决第一个问题,就是Rails中模型类ActiveRecord的数据验证问题。
我们先进入rails控制台
这次我们仿造上节课的方法再次创建一个对象,不过这次我们不在new后面添加参数。
这时我们来看一下,可以看到新用户的用户名和邮箱都是空的:
通过这个例子可以知道,因为没有验证所以创建用户没有任何形式验证,这样你创建了完全没用的空用户显然是不合理的。所以我们需要rails的验证机制,我们输入格式错误就不予创建并给出提示。
- 首先用户名和邮箱的内容不能为空
- 用户名必须为字符串,并且长度不能太长,一般规定20个字符
- 邮箱格式符合基本的邮箱格式规范
- 最后我们希望把邮箱作为用户的唯一标识,不同用户不能拥有相同的邮箱
如上,用户模型需要四种验证:存在性验证,程度验证,格式验证,唯一性验证
数据验证的关键字是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表示不区分大小写即不敏感
?
?
?
?
?
?
?