补充上一章的内容:当代码改变,要重新进入console
模型的数据验证: 对不符合要求的对象无效,不予创建
- 存在性验证:
在User实体类中添加如下代码,进行存在性验证,关键函数(validates),关键字(presence: true/false):
validates :userName, presence: true
在console中:
irb(main):001:0> @user = User.new
=> #<User id: nil, userName: nil, email: nil, created_at: nil, updated_at: nil>
irb(main):002:0> @user.save
(0.1ms) begin transaction
(0.1ms) rollback transaction
=> false
irb(main):003:0> @user.errors.full_messages
=> ["Username can't be blank"]
- 长度验证:关键函数(validates),关键字(length:{maximum: 20})
validates :userName, presence: true , length: {maximum: 20}
加入不满足条件,会报错:
irb(main):004:0> @user.errors.full_messages
=> ["Username is too long (maximum is 20 characters)"]
- 格式验证: 关键字(format: {with: 正则表达式})
EMAIL = /\A[\w+\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: {with: EMAIL}
ruby的正则表达式有点迷……需要再学
然后加入不满足条件的,报错如下:
irb(main):004:0> @user.errors.full_messages
=> ["Email is invalid"]
- 唯一性验证:关键字(uniqueness: {case_sensitive: false})
EMAIL = /\A[\w+\-.]+\.[a-z]+\z/i
validates :userName, presence: true , length: {maximum: 20}, uniqueness: {case_sensitive: false}
validates :email, presence: true, format: {with: EMAIL}, uniqueness: {case_sensitive: false}
但是这种唯一性验证,仅仅是初级手段,存在些许问题,需要在数据库中进行唯一性设置,以后再说,但是在初级阶段来说,够用了。