活动记录 - 如果数据类型无效,User.new 不会引发错误



假设我在 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
  • 用户控制器

    类 用户控制器

非常感谢您的帮助!

您可能希望创建自定义验证(请参阅此处),将所需的消息添加到用户实例上的错误数组中。导游介绍了突出的部分。

最新更新