fchaose / qeephp

Automatically exported from code.google.com/p/qeephp
0 stars 0 forks source link

ActiveRecord 验证时没有正确处理 allow_null 策略 #83

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
验证单个属性的逻辑:

1、如果属性的值是 null,则判断属性是否允许为 null
1.1、如果不允许属性值为 null,则验证失败【failed】-> 
跳到下一个属性的验证
1.2、如果允许属性值为 null,则验证成功【successed】-> 
跳到下一个属性的验证

2、用验证规则对属性值进行验证
2.1、如果验证规则失败,则检查属性的 check_all_rules 验证策略
2.1.1、当 check_all_rules 为 false 
时,则不再对该属性进行后续的验证
【failed】 -> 跳到下一个属性的验证
2.1.2、当 check_all_rules 为 true 
时,记录下这个验证失败的结果,然后继续下
一个验证规则
2.2、验证成功则继续下一个验证规则

因此如果属性值为 null,而属性的验证规则 allow_blank 为 
true,则视为有效数
据,直接跳过后续的验证规则。这样一来,一个属性的其他��
�证规则在属性为 null
时就不再生效了。

Original issue reported on code.google.com by dualf...@gmail.com on 11 Jul 2008 at 11:38

GoogleCodeExporter commented 8 years ago
完善后的验证逻辑:

1、如果属性的值是 null,则判断属性是否允许为 null
1.1、根据当前验证模式从 create_autofill 或 update_autofill 
中检查该属性是否有自动填充
值。如果有,则验证通过,继续验证下一个字段
1.2、如果不允许属性值为 null,则验证失败【failed】-> 
跳到下一个属性的验证
1.3、如果允许属性值为 null,则验证成功【successed】-> 
跳到下一个属性的验证

其他验证不变。

Original comment by dualf...@gmail.com on 21 Sep 2008 at 8:33

GoogleCodeExporter commented 8 years ago
完善后的验证逻辑:

1、如果属性的值是 null,则判断属性是否允许为 null
1.1、根据当前验证模式从 create_autofill 或 update_autofill 
中检查该属性是否有自动填充
值。如果有,则验证通过,继续验证下一个字段
1.2、如果不允许属性值为 null,则验证失败【failed】-> 
跳到下一个属性的验证
1.3、如果允许属性值为 null,则验证成功【successed】-> 
跳到下一个属性的验证

其他验证不变。

Original comment by dualf...@gmail.com on 21 Sep 2008 at 8:35