我有以下模型现场验证:

validates_uniqueness_of :acronym, :scope => [:group_id], :case_sensitive => false

问题在于,该字段是可选的,空/nil值作为已使用的首字母缩略词返回.我只想验证,如果提供了值,首字母缩写词是唯一的..是否有方法更新此验证,使其仅在存在实际值时进行..不是零/空?

谢谢

推荐答案

是的,有两个可能的选项可以传递给可选字段的验证::allow_blank:allow_nil,这将分别跳过blanknil字段的验证.如果将验证更改为以下内容,则应获得所需的行为:

validates_uniqueness_of :acronym, :allow_blank => true, :scope => [:group_id], :case_sensitive => false

Ruby-on-rails相关问答推荐

Rails Routing:在具有自己的路由的名称空间下组织路由

Rails版本7.1.2:当验证失败且控制器发送422状态时,JS停止工作

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

删除 aws s3 (rails7) 上的日志(log)文件

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

Heroku 应用程序上的远程 mysql 数据库

Rails Active Record - 从关系中获取 ids 数组

使用brew 软件安装了 elasticsearch,但找不到配置文件

为什么在保存对象后使用重新加载方法? (Hartl Rails Tut 6.30)

如何更改 Heroku 应用程序的 DATABASE_URL

Rails 4 迁移:如何重新排序列

Rails 5:无法从参数中检索哈希值

警告:引用了顶级常量

如何在rails中异步加载部分页面

Ruby on Rails 中的MySQL 服务器已经消失

Rails 3.1 Sprockets 需要指令 - 有没有办法排除特定文件?

过滤器在渲染之前但在控制器之后执行?

rails respond_to format.js API

如何在 Rails 4 中测试控制器关注点

在 GIT 中处理 Rails db/schema.rb 文件的正确方法是什么?