![](/img/trans.png)
[英]How to change date format from yyyy/mm/dd to dd/mm/yyyy Ruby on Rails
[英]Getting rails to accept European date format (dd/mm/yyyy)
我希望我的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
如果知道有用,则表单字段是Orders中的嵌套,并且Orders设置为:
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
值为nil的情况。 在你的情况下,它是一个空字符串,但由于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 /%m /%Y”)。to_time
self.due_at = xxx
我可以'相信这应该是必要的。 我唯一能想到的是,ruby在完成使用右侧的due_at源字符串之前,逐个分配新目标日期类中的字段。
Ruby 1.9.3中似乎不存在这个问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.