ruby-on-rails - 如何强制 Rails ActiveRecord 字符串列只接受字符串?

标签 ruby-on-rails activerecord

我有一个带有 title:string 字段的 Post

post = Post.create!
#=> Post created
post.title = "foo"
post.save! 
# success
post.title = 1
post.save! 
# succeeds, but I want it to throw a type mismatch exception

我如何获得最后一次保存!抛出类型不匹配?

最佳答案

这确实违背了 Ruby 的本质。如果它是字符串列,数据库层将负责将该值呈现为字符串并保存。

类型的概念在 Ruby 中与在其他语言中不同。一般来说,如果一个对象支持 to_s,那么它就被认为是 string-enough 可以使用,Duck Typing 的基本原则.

如果您传入无法呈现为字符串的内容,则会出现异常。例如:

post.title = Post.find(5)

如果您希望确保您的字段不是数字,您应该添加强制执行特定格式的验证。

关于ruby-on-rails - 如何强制 Rails ActiveRecord 字符串列只接受字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411954/

相关文章:

activerecord - yii2 ActiveRecord findBySql - 响应内容不能是数组错误

ruby-on-rails - Heroku 和 Restful API 隐私和安全问题

ruby-on-rails - 重新分配路线的最佳方法是什么

ruby-on-rails - 将元素插入 PostgreSQL 数组而不覆盖它

ruby-on-rails - Mongoid 相当于 ActiveRecord 的 `first_or_initialize`

php - 如何使用 Yii 2 ActiveRecord 执行 IS NULL 和 IS NOT NULL?

ruby-on-rails - 将 Add 方法添加到 ActiveRecord 数组

ruby-on-rails - sprockets/rails : Find all files Sprockets knows how to compile

ruby-on-rails - 安装 Ruby - Digital Ocean - RVM - 不稳定的 ruby​​ 版本 - 无法安装 Gems

mysql - 如何从 rails env 检查 mysql 数据库存在的位置?