让导轨接受欧洲日期格式(dd/mm/yyyy)

问题描述:

我希望我的导轨应用接受格式为dd/mm/yyyy的日期字段的日期。让导轨接受欧洲日期格式(dd/mm/yyyy)

在我的模型我试图将日期转换为美国标准,我想Date.parse方法Rails会在调用它期待:

before_validation :check_due_at_format 

    def check_due_at_format 
    self.due_at = Date.strptime(self.due_at,"%d/%m/%Y").to_time 
    end 

然而,这将返回:

TypeError in OrdersController#update 
can't dup NilClass 

如果是需要了解的,该项目形成字段是一个嵌套订单内和订单设置为:

accepts_nested_attributes_for :items, :reject_if => lambda { |a| a[:quantity].blank? && a[:due_at].blank? }, :allow_destroy => :true 

所以项目正在验证和保存/更新@ order.save/@ order.update_attributes

谢谢!

这可能只是due_at的值为零的情况。在你的情况下,它是一个空字符串,但由于accepts_nested_attributes_for上的:reject_if选项而被忽略,所以它仍然为零。

>> Date.strptime(nil, "%d/%m/%Y") 
TypeError: can't dup NilClass 

照顾一些有条件的然后。

self.due_at = Date.strptime(self.due_at,"%d/%m/%Y").to_time unless self.due_at.nil? 

我已经达成正是用Ruby 1.8.7同样的问题,我可以解决这是应该做两步自我分配的唯一途径!

XXX = Date.strptime(self.due_at, “%d /%米/%Y”)。TO_TIME

self.due_at = XXX

我不能认为,这应该是必要的。我能想到的唯一的事情就是ruby在完成使用右边的due_at源字符串之前,在新的目标日期类中逐个分配字段。

这个问题似乎并不存在于Ruby 1.9.3中