让轨道接受欧洲日期格式(年/月/日)

时间:2010-02-05 04:11:28

标签: ruby-on-rails ruby date parsing

我希望我的rails应用程序接受日期字段的日期,格式为dd / mm / yyyy。

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

  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

上验证和保存/更新

谢谢!

2 个答案:

答案 0 :(得分:1)

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

>> 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?

答案 1 :(得分:1)

我在Ruby 1.8.7中遇到了完全相同的问题,我能解决它的唯一方法是分两步完成自我分配!!

xxx = Date.strptime(self.due_at,"%d /%m /%Y")。to_time

self.due_at = xxx

我可以'相信这应该是必要的。我唯一能想到的是ruby在完成在右侧使用due_at源字符串之前,逐个分配新目标日期类中的字段。

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