Получение рельсов для принятия европейского формата даты (дд / мм / гггг) - PullRequest
3 голосов
/ 05 февраля 2010

Я хочу, чтобы мое приложение rails принимало даты для поля даты в формате дд / мм / гггг.

В моей модели я пытался преобразовать дату в американский стандарт, который, я думаю, ожидает метод 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

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 октября 2014

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

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

self.due_at = ххх

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

Кажется, что проблема не существует в Ruby 1.9.3

1 голос
/ 05 февраля 2010

Это может быть только случай, когда значение due_at равно нулю. В вашем случае это пустая строка, но игнорируется из-за опции :reject_if на accepts_nested_attributes_for, и поэтому она остается равной nil.

>> 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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...