"date" 数据类型的正确格式是什么?

What's the proper format for the "date" datatype?

我的模型 "User" 有一个日期属性 :birthday。但是,如果我提交 x/x/x 以外的任何格式的生日,它就会变成零。因此,例如,1/1/1 变为“0001-01-01”,但 1/1/15 变为 nil。 1/1/2 变为“0001-01-02”,但 22/1/3 变为零。

我觉得我在这里遗漏了什么。日期属性不可能只能是x/x/x吧?

你是怎么设置日期的?是不是有点像 @user.birthday = params[:birthday]?这会给你带来问题,因为它不是日期,它是一个字符串,并且是一个与你的数据库存储日期的格式不同的字符串。

您有两个选择:

A) 理想情况下,您应该将输入转换为日期,然后使用实际日期对象设置字段。

B) 确保您的参数格式与您的数据库存储日期的方式匹配(从外观上看是 "yyyy-mm-dd")。

A最好。我会重写 User#birthday= 方法来尝试让它尽可能有用地处理日期。例如

#in User model
 def birthday=(arg)
   if arg.is_a?(Date)
     self[:birthday] = arg
   elsif arg =~ /\d+\/\d+\/\d+/
     self[:birthday] = Date.strptime(arg, "%d/%m/%y")
   elsif arg =~ /\d+\-\d+\-\d+/
     self[:birthday] = Date.strptime(arg, "%y/%m/%d")
   else
     self[:birthday] = arg
   end
 end