2010-02-05 2 views
2

Я хочу, чтобы мое приложение rails принимало даты для поля даты в формате 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

Спасибо!

ответ

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

Я столкнулся с одной и той же проблемой в Ruby 1.8.7, и единственный способ, которым я мог решить, состоял в том, чтобы выполнить самоопределение в два шага!

ххх = Date.strptime (self.due_at, "% д /% м /% Y"). TO_TIME

self.due_at = ххх

могу»считаем, что это должно быть необходимым. Единственное, о чем я могу думать, это то, что ruby ​​назначает поля в новом целевом классе даты на поэтапной основе до того, как он закончит использовать исходную строку due_at с правой стороны.

Проблема не существует в Ruby 1.9.3

Смежные вопросы