假设我在rails中有一个User模型,其中包含一个名为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是在params中发送的,那么我们将保存到数据库中,birth_date等于nil但是得到错误消息或者我们根本不保存到数据库中。如果没有在params中发送birth_date,我们就不会抛出错误。
我想到了一个解决方法,它会查看参数中存在的字段,查看确实记录在数据库中的内容并比较两者。但我认为可能存在更好的方式。
为了测试,这里有一些代码:
用户模型
class User&lt;的ActiveRecord ::基
端
用户迁移
类CreateUsers&lt; ActiveRecord的::迁移
def change
create_table :users do |t|
t.date :birth_date
t.integer :some_number
t.timestamps null: false
end
end
end
用户控制器
类UsersController&lt; ApplicationController的 def创建 user = User.new(birth_date:&#34; foo&#34;,some_number:&#34; bar&#34;) 提升user.inspect 结束 端
非常感谢你的帮助!