确认:UnderstandingValidation

来源:百度文库 编辑:神马文学网 时间:2024/03/29 04:20:02
译自:http://wiki.rubyonrails.com/rails/pages/UnderstandingValidation
为什么要“确认”?
“确认”是确保数据库内信息完整的有效工具。它组成了所有记录保存前必须接受的最小标准。
例子:伪代码
一个有效的用户应该:
- 有名字和口令
- 名字是唯一的
- 口令须介于5到15个字符之间
把这些规则做为你的“模型”的一部分,Rails将不保存任何不满足要求的用户。
当使用“确认”时,Rails保持对所有错误的跟踪,并将为这些errors构建错误消息。然后它
显示这些消息给用户以便于错误被纠正。
“确认”何时发生?
“确认”在“模型”被存储之前发生。如果被保存中的“模型”不匹配“确认”的要求,它将不会被保存到数据库。
试图保存一个无效的“模型”会返回false。这符合“if-save”约定:
if @user.save
# 用户有效并被保存
..
else
# 用户无效,不被保存
..
end
通过调用“模型”的“确认”方法,你可以手工地触发“确认”。
@user.validate
但是用的最多的是对valid?的调用,它运行“确认”并返回true或false。
if @user.valid?
...
避免“确认”
通过传递false给save方法,你可以跳过“确认”。
@user.save(false)
方法 update_attribute 不会触发“确认”,同样,调用update_attribute方法也不会触发“确认”。
跳过“确认”的明显后果是无效数据被记录到数据库中。
当“模型”被“确认”时会发生什么?
当一个“模型”被“确认”时,任何确认的错误都会被收集到“模型的”errors对象中。
(作者没有写完)
更多参考信息:
1、HowtoValidate
2、Validation API Documentation has all sorts of details about what methods are available.
3、Validation class methods explain how to use declarative validation
高级部分:
1、HowToUseValidationsWithoutExtendingActiveRecord
2、HowToAddCustomValidationKeywords