资料验证(Validation)
回呼(Callback)
资料验证(Validation)
开发网站应⽤程序,资料的正确性是很重要的。⼤家应该都不会想被有意或无意的
在资料库里塞了奇怪的资料,所以通常都会加上资料验证的机制,确保写入的资料
是符合规定的。
验证该在哪里做?
那,这个资料验证机制该写在哪里比较好呢?常⾒的选项有:
class Article < ApplicationRecord
validates :title, presence: true
end
中间那⾏ validates ⽅法的意思是「title 这个栏位为必填栏位」,让我们开
rails console 起来试⼀下:
$ bin/rails console
>> a1 = Article.new
=> #<Article id: nil, title: nil, content: nil, is_online: nil, c
reated_at: nil, updated_at: nil, photo: nil, user_id: nil>
先⽤ new ⽅法建立⼀个 Article 物件,然後⽤ errors ⽅法看⼀下这个物件有没
有什麽状况:
>> a1.errors.any?
=> false
这时候看起来没什麽问题。接着试着呼叫 save ⽅法把这颗物件存入资料表:
>> a1.save
(0.2ms) begin transaction
(0.1ms) rollback transaction
=> false
发现 save ⽅法失败了,并且回传 false,来看看到底是哪边有问题:
>> a1.errors.any?
=> true
原本没问题的,在 save 之後变得有问题了。来看看错误讯息是什麽:
>> a1.errors.full_messages
=> ["Title can't be blank"]
除了 validates :title, presence: true 之外,还有另⼀种写法:
class Article < ActiveRecord::Base
validates_presence_of :title
end
效果也是⼀样的。
除了 presence 之外,Rails 还有提供其它像是 uniqueness 、 length 或
numericality 等便利的验证器,使⽤⽅法可直接参考 Rails Guide 的 Validations
章节。
[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html
<<: [重构倒数第04天] - 轮播套件难道只可以做图片轮播吗
摘要 DenseNet201 1.1 来源 1.2 架构 1.3 特性 训练过程 2.1 预训练模型...
NetSuite Reporting NetSuite 内建许多常用的报告, 包括各种收入支出表, ...
D24. C++的标准输出 先来看看最原始的C++ Hello World程序码 #include ...
if else 条件式| 二择一 | ?: ...
Junior engineer(初级工程师) 开发项目一段时间後,会开始慢慢发现, 上头交代的任务...