【发布时间】:2023-03-16 04:33:01
【问题描述】:
假设我在 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,所以我不能使用存在 true 的birth_date 验证。所以用户最终被保存到数据库中,其出生日期等于 nil 并且没有错误。
这里的目标是,如果在参数中发送了birth_date,那么我们要么将birth_date 等于nil 保存到数据库中,但得到一条错误消息,或者我们根本不保存到数据库中。如果没有在参数中发送birth_date,我们不会抛出错误。
我想到了一种解决方法,即查看参数中存在的字段,查看确实记录到数据库中的内容并比较两者。但我认为可能存在更好的方法。
为了测试,这里有一些代码:
-
用户模型
类用户<:base>
结束
用户迁移
类 CreateUsers
def change
create_table :users do |t|
t.date :birth_date
t.integer :some_number
t.timestamps null: false
end
end
end
-
用户控制器
类用户控制器
非常感谢您的帮助!
【问题讨论】:
-
has_key方法是否不适合您的需求?然后您可以通过if params.has_key(:birth_date) then进行检查
标签: ruby-on-rails validation rails-activerecord