当前位置: 首页 > news >正文

Ruby On Rails 笔记5——常用验证下

3.Validation Options

3.1 :allow_nil

当验证值为nil时:allow_nil选项会跳过验证

class Coffee < ApplicationRecordvalidates :size, inclusion: { in: %w(small medium large),message: "%{value} is not a valid size" }, allow_nil: true
end
irb> Coffee.create(size: nil).valid?
=> true
irb> Coffee.create(size: "mega").valid?
=> false

3.1 :allow_blank

如果属性值为blank?,则跳过验证。

class Topic < ApplicationRecordvalidates :title, length: { is: 5 }, allow_blank: true
end
irb> Topic.create(title: "").valid?
=> true
irb> Topic.create(title: nil).valid?
=> true
irb> Topic.create(title: "short").valid?
=> false # 'short' is not of length 5, so validation fails even though it's not blank

3.3 :message

允许指定验证失败时添加到errors集合中的消息,否则,会使用默认错误消息。

class Person < ApplicationRecord# Hard-coded messagevalidates :name, presence: { message: "must be given please" }# Message with dynamic attribute value. %{value} will be replaced# with the actual value of the attribute. %{attribute} and %{model}# are also available.validates :age, numericality: { message: "%{value} seems wrong" }
end

Proc :message值有两个参数:正在验证的对象以及包含:model、:attribute 和 :value 键值对的hash。

class Person < ApplicationRecordvalidates :username,uniqueness: {# object = person object being validated# data = { model: "Person", attribute: "Username", value: <username> }message: ->(object, data) do"Hey #{object.name}, #{data[:value]} is already taken."end}
end

3.4 :on

on 选项允许你指定验证发生时间。默认情况下设置的验证会在save时运行,可以根据需要修改

class Person < ApplicationRecord# it will be possible to update email with a duplicated valuevalidates :email, uniqueness: true, on: :create# it will be possible to create the record with a non-numerical agevalidates :age, numericality: true, on: :update# the default (validates on both create and update)validates :name, presence: true
end
4. Conditional Validations

有时,只有在满足给定条件时才能验证对象,这可以通过:if 和 :unless 选项来实现。

class Order < ApplicationRecordvalidates :card_number, presence: true, if: :paid_with_card?def paid_with_card?payment_type == "card"end
end

或者

class Account < ApplicationRecordvalidates :password, confirmation: true,unless: Proc.new { |a| a.password.blank? }
end

:if 和 :unless也可以同时验证

class Computer < ApplicationRecordvalidates :mouse, presence: true,if: [Proc.new { |c| c.market.retail? }, :desktop?],unless: Proc.new { |c| c.trackpad.present? }
end
5 自定义验证
class Invoice < ApplicationRecordvalidate :expiration_date_cannot_be_in_the_past,:discount_cannot_be_greater_than_total_valuedef expiration_date_cannot_be_in_the_pastif expiration_date.present? && expiration_date < Date.todayerrors.add(:expiration_date, "can't be in the past")endenddef discount_cannot_be_greater_than_total_valueif discount > total_valueerrors.add(:discount, "can't be greater than total value")endend
end
6. 在视图中显示验证错误

定义模型并添加验证后,当通过网络表单创建model时验证失败,需要显示信息。

由于每个应用程序处理显示验证错误不同,因此Rails不包含任何用于生成这些信息的视图助手,需要自己写。比如:

<% if @article.errors.any? %><div id="error_explanation"><h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2><ul><% @article.errors.each do |error| %><li><%= error.full_message %></li><% end %></ul></div>
<% end %>

相关文章:

Ruby On Rails 笔记5——常用验证下

3.Validation Options 3.1 :allow_nil 当验证值为nil时:allow_nil选项会跳过验证 class Coffee < ApplicationRecordvalidates :size, inclusion: { in: %w(small medium large),message: "%{value} is not a valid size" }, allow_nil: true end irb> Cof…...

JS听到了因果的回响

这是我学习JS的第11天了&#xff0c;&#xff0c;&#xff0c;我现在赶着周末学JS&#xff0c;然后还有二十多天就期末了呵呵呵。。。 图片切换模块 思路分析&#xff1a; 这是实现的代码&#xff0c;建议还是把不同的变量定义出来比较合适&#xff1a; //获取三个盒子// 小盒…...

【高中生讲机器学习】28. 集成学习之 Bagging 随机森林!

创建时间&#xff1a;2024-12-09 首发时间&#xff1a;2024-12-09 最后编辑时间&#xff1a;2024-12-09 作者&#xff1a;Geeker_LStar 嘿嘿&#xff0c;你好呀&#xff01;我又来啦~~ 前面我们讲完了集成学习之 Boooooosting&#xff0c;这篇我们来看看集成学习的另一个分支…...

硬件设计 | Altium Designer软件PCB规则设置

基于Altium Designer&#xff08;24.9.1&#xff09;版本 嘉立创PCB工艺加工能力范围说明-嘉立创PCB打样专业工厂-线路板打样 规则参考-嘉立创 注意事项 1.每次设置完规则参数都要点击应用保存 2.每次创建PCB&#xff0c;都要设置好参数 3.可以设置默认规则&#xff0c;将…...

【Elasticsearch】实现用户行为分析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

python字符串处理基础操作总结

1.去掉空格或者特殊符号 input_str.strip() #去掉所有空格 input_str.lstrip() #去掉左边空格 input_str.rstrip() #去掉右边空格 def print_hi():input_str 今天天气不错&#xff0c;风和日丽 out input_str.strip()print(input_str)print(out)if __name__ __main__:print…...

电子商务人工智能指南 6/6 - 人工智能生成的产品图像

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...

【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究

文章目录 概述&#xff1a;摘要1. 引言2. 相似误差订正算法&#xff08;核心&#xff09;3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...

贪心算法 - 学习笔记 【C++】

2024-12-09 - 第 38 篇 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 贪心算法 学习课程&#xff1a; https://www.bilibili.com/video/BV1f84y1i7mv/?spm_id_from333.337.search-card.all.click&vd_source2683707f584c21c57616cc6ce8454e2b 一、基本…...

精确的单向延迟测量:使用普通硬件和软件

论文标题&#xff1a;Precise One-way Delay Measurement with Common Hardware and Software&#xff08;精确的单向延迟测量&#xff1a;使用普通硬件和软件&#xff09; 作者信息&#xff1a;Maciej Muehleisen 和 Mazen Abdel Latif&#xff0c;来自Ericsson Research Eri…...

【MySQL 进阶之路】存储引擎和SQL优化技巧分析

1.InnoDB和MyISAM存储引擎的区别是什么&#xff1f;你在哪些场景下选择InnoDB&#xff1f; Innodb是高并发&#xff0c;支持事务跟行级锁&#xff0c;myisam不支持事务和行级锁&#xff0c;支持表级锁&#xff0c;不支持高并发。innodb底层是B树&#xff0c;适合范围查询&#…...

vue+elementUI从B页面回到A页面并且定位到A页面的el-tabs的某个页签

场景 做项目碰到一个需求&#xff0c;不能使用组件缓存keep-alive&#xff0c;但是需要跳转到B页面后&#xff0c;点击B页面的返回回到A页面的某个页签&#xff0c;灵机一动利用路由拦截去判断即将要跳转的页面后&#xff0c;在获取vm里对应的标签变量进行赋值&#xff0c;实现…...

{结对编程/大模型} 实践营项目案例 | 基于RAG搭建政策问答智能聊天助手

在构建政策问答智能聊天助手的过程中&#xff0c;我们采用了 RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术。RAG 是一种结合了检索和生成的混合型自然语言处理技术&#xff0c;它通过检索相关信息来增强生成模型的上下文理解能力。RAG 的主要优点在于能够有…...

【Canvas与图标】乡土风金属铝边立方红黄底黑字图像处理图标

【成图】 120*120图标&#xff1a; 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金属铝边立方红黄底黑…...

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

C++实现一个经典计算器(逆波兰算法)附源码

1、本篇要实现的内容 最近&#xff0c;大家讨论计算器的实现比较热&#xff0c;今天我也来用C和Visual Studio实现一个计算器的小程序。这里使用逆波兰算法&#xff0c;能够根据当前用户输入的算式表达式字符串&#xff0c;计算出所要的结果&#xff0c;算式字符串可以包括加、…...

Python知识分享第二十二天-数据结构入门

数据结构 “”" 基础概念: 程序 数据结构 算法 数据结构 存储和组织数据的方式. 算法 解决问题的思维, 思路, 方式. 算法的特性:独立性: 算法 思维, 是解决问题的思路和方式, 不依赖语言.5大特性: 有输入, 有输出, 有穷性, 确定性, 可行性.问: 如何衡量算法的优劣?…...

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…...

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...

【ETCD】【源码阅读】configureClientListeners () 函数解析

逐步解析 configureClientListeners 函数 configureClientListeners 是 ETCD 的一个重要函数&#xff0c;用于配置客户端通信的监听器&#xff08;Client Listeners&#xff09;。这些监听器主要负责处理外部客户端与 ETCD 服务之间的通信&#xff0c;包括 HTTP 和 gRPC 请求。…...

3步实现专业级3D建模:突破性AI工具全解析

3步实现专业级3D建模&#xff1a;突破性AI工具全解析 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 在数字创作领域&#xff0c;AI 3D建模正在改变传统流程&#xff0c;而单图转3D…...

STM32架构解析:哈佛与冯·诺依曼的工程实践

STM32处理器架构解析&#xff1a;哈佛结构与冯诺依曼结构的工程实践 1. 计算机体系结构基础 1.1 冯诺依曼体系结构 冯诺依曼体系结构&#xff08;Von Neumann architecture&#xff09;是现代计算机的基础设计范式&#xff0c;其核心特征包括&#xff1a; 统一存储结构 &am…...

如何在1小时内掌握TinySAM:从零开始构建高效图像分割模型

如何在1小时内掌握TinySAM&#xff1a;从零开始构建高效图像分割模型 【免费下载链接】TinySAM 项目地址: https://gitcode.com/gh_mirrors/ti/TinySAM 想象一下&#xff0c;你需要在移动设备上实时分割图像中的任意物体&#xff0c;但传统模型动辄几百兆&#xff0c;运…...

需求分析避坑指南:如何避免‘用户说要马实际要车’的经典陷阱?

需求分析避坑指南&#xff1a;如何避免‘用户说要马实际要车’的经典陷阱&#xff1f; 在软件开发领域&#xff0c;需求分析是项目成败的关键环节。据统计&#xff0c;约70%的项目失败源于需求不明确或理解偏差。当用户说"想要一匹更快的马"时&#xff0c;他们真正需…...

F3D:为什么这款极简3D查看器能让你彻底告别传统软件的臃肿?

F3D&#xff1a;为什么这款极简3D查看器能让你彻底告别传统软件的臃肿&#xff1f; 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 在3D设计、工程可视化和科研数据分析的日常工作中&#xff0c;你是否曾因…...

电脑卡顿的幕后真相:为什么你的内存总是不够用?

电脑卡顿的幕后真相&#xff1a;为什么你的内存总是不够用&#xff1f; 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

如何通过智能备份技术实现微信聊天记录的数据主权?本地化管理方案全解析

如何通过智能备份技术实现微信聊天记录的数据主权&#xff1f;本地化管理方案全解析 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_…...

VideoAgentTrek-ScreenFilter效果展示:Zoom/Teams会议窗口自动边界检测

VideoAgentTrek-ScreenFilter效果展示&#xff1a;Zoom/Teams会议窗口自动边界检测 你有没有遇到过这样的场景&#xff1f;在录制线上会议、网课或者远程演示时&#xff0c;屏幕上同时开着好几个窗口——Zoom会议、Teams聊天、PPT演示、还有一堆浏览器标签页。后期剪辑时&…...

UniHacker技术探索:Unity引擎全功能体验与开源研究指南

UniHacker技术探索&#xff1a;Unity引擎全功能体验与开源研究指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 一、核心价值解析&#xff1a;技术研究视…...

Python MCP服务部署成本飙升?5个被90%团队忽略的隐性开销及实时监控方案

第一章&#xff1a;Python MCP服务部署成本飙升的真相与警示Python MCP&#xff08;Model Control Plane&#xff09;服务在微服务架构中承担模型注册、版本调度、A/B测试路由等关键职责。近期大量团队反馈其云上部署成本在两周内激增300%以上&#xff0c;远超业务增长曲线。深…...