我的模特"用户"有一个日期属性: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
,对吗?
答案 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