ruby-on-rails - Rails 中的验证在内部使用元编程?它实际上是如何工作的?
问题描述
我们已经在 rails 中看到我们对特定列执行类似这样的验证 -
validates :first_name, presence: true
这个语句实际上是做什么的?我认为它为我们的模型类创建了一个类方法,其方法名为“first_name”。一旦有人执行 object.first_name 并查找此参数的值,就会调用此方法,以防 value 为空引发错误,否则返回 true。
我不确定我是否在这里。如果有人可以解释整个周期,那就太好了。谢谢!
解决方案
如果您的模型中有validates :attribute, presence: true
一行,则它与存储在数据库中的属性相关,而不是自定义方法。
您的验证将在数据库中的模型表中搜索记录,并确保 first_name 属性不为零。
编辑:正如 mrzasa 在下面指出的那样,它实际上并没有在验证时检索您的记录的新实例,而是使用当前内存中的属性
如果是,它将在您的记录中添加一个验证错误,您将无法保存它。
如果您想了解验证的工作原理,我强烈建议您阅读https://guides.rubyonrails.org/active_record_validations.html#validations-overview 。
推荐阅读
- java - 如何将对象保存到文件中并将其加载回 Java 程序中?
- r - 如何在 r 中使用删除重复项但同时保留一些有条件的重复项
- python - How can I create a dictionary from a list where the keys are the indexes and the values are the actual elements of the list one by one?
- ios - 无法将超过 5GB 的视频文件上传到 AWS S3 存储桶
- html - 从后端请求时在反应中显示图像
- reactjs - 在某些屏幕中隐藏底部选项卡
- excel - Excel条形图创建
- c# - 使绘制的正方形可选
- android - 在 RxJava 中执行每个 Concat 元素之前如何做一些事情?
- javascript - async/await 在 jQuery each() 中没有按预期工作