假设我在 rails 中有一个用户模型,其中包含一个名为 birth_date
的日期字段和一个名为 some_number
的整数字段。我的问题是,如果我User.new(birth_date: "foo", some_number: "bar")
,我不会得到任何错误。事实上我会得到#<User id: nil, birth_date: nil, some_number: 0, created_at: nil, updated_at: nil>
我想有一个错误告诉我此字段无效,以便可以警告客户端。但是由于我不一定需要birth_date,因此我不能使用存在为真的birth_date验证。因此,用户最终被保存到数据库中,birth_date等于 nil 且没有错误。
这里的目标是,如果birth_date是在参数中发送的,那么我们将保存到数据库中,birth_date等于 nil 但收到错误消息,或者我们根本不保存到数据库中。如果birth_date没有在参数中发送,我们不会抛出错误。
我想到了一种解决方法,可以查看参数中存在的字段,查看确实记录到数据库中的内容并比较两者。但我认为可能存在更好的方法。
为了进行测试,下面是一些代码:
-
用户模型
类 用户 <活动记录::基本>
结束
-
用户迁移
类 创建用户 <活动记录::迁移>
def change
create_table :users do |t|
t.date :birth_date
t.integer :some_number
t.timestamps null: false
end
end
end
用户控制器
类 用户控制器
非常感谢您的帮助!
您可能希望创建自定义验证(请参阅此处),将所需的消息添加到用户实例上的错误数组中。导游介绍了突出的部分。