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

时间:2016-03-05 17:27:17

标签: ruby-on-rails validation rails-activerecord

假设我在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   结束 端

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

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