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

时间:2015-01-21 16:46:44

标签: ruby-on-rails ruby date ruby-on-rails-4 attributes

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

我觉得我在这里遗漏了一些东西。日期属性只能是x/x/x,对吗?

可能是真的

1 个答案:

答案 0 :(得分:1)

你是如何设定日期的?它是@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
相关问题