Luc*_*ain 52 validation ruby-on-rails
我使用以下方法为对象添加了验证:
validate :field, presence: true
Run Code Online (Sandbox Code Playgroud)
我发现他们没有给出错误信息.我将它们更改为validates并收到错误消息.这张票是相关的.
我尝试添加自定义验证validates并收到错误:
You need to supply at least one validation
Run Code Online (Sandbox Code Playgroud)
我把它改成了validate,一切都按预期进行了.
我的理解是使用validates普通验证和validate自定义验证.是对的吗?还有其他我应该知道的部分吗?有没有办法让第一个问题大声失败而不只是验证一切?
rma*_*002 71
validates此方法是所有默认验证器和以"Validator"结尾的任何自定义验证器类的快捷方式.请注意,通过在其位置创建自定义验证程序类(如PresenceValidator),可以在特定类中覆盖Rails默认验证程序.
validates :title, :body, :presence => true
Run Code Online (Sandbox Code Playgroud)
验证,向类添加验证方法或块.当覆盖验证实例方法变得过于笨拙并且您正在寻找更具描述性的验证声明时,这非常有用.
validate :must_be_friends
def must_be_friends
errors.add(:base, 'Must be friends to leave a comment') unless commenter.friend_of?(commentee)
end
Run Code Online (Sandbox Code Playgroud)
Vir*_*ren 10
我相信:validate声明用于自定义验证,如:validates用于字段上的通用验证presence, uniqueness etc
该validate方法查找具有参数名称的方法,即如果您这样做validate :field将查找
def field
end
Run Code Online (Sandbox Code Playgroud)
在你的object.由于Rails的定义attr_accessor为每一个数据库field中validate :field会召唤field的读者法.
如果验证函数返回true或者如果存在error对象,即object.errors不为空,则考虑该对象valid?
因此ligthouse问题的原因,他们抱怨validate silently bypasses验证:)
希望这是有道理的
| 归档时间: |
|
| 查看次数: |
15755 次 |
| 最近记录: |