Как сравнить DateTime в пользовательских проверках? - PullRequest
1 голос
/ 30 июня 2011

Я пытаюсь написать пользовательскую проверку ... люди вводят время начала и окончания на сайт, а я пытаюсь написать проверку, чтобы убедиться, что конец наступает после начала. Я пытался преобразовать его во время Unix, но затем я получаю noMethodError. Я хотел бы передать символы для времени начала и окончания в этот метод, а затем сравнить их.

  def validates_end_is_after_start(*attr_names)

    start_hour = attr_names[0].to_i
    end_hour = attr_names[1].to_i

Проблема в том, что это заканчивается noMethodError для символа. Но этот символ указывает на объект DateTime (я думаю), как мне получить доступ к этому объекту? Я думаю, что есть что-то, чего я не понимаю в символах вообще.

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Вы можете использовать метод validate, который будет иметь доступ к датам с приведенным типом

class Something < ActiveRecord::Base

  validate :valid_dates

  def valid_dates
    if start_time >= end_time
      self.errors.add :start_time, ' has to be after end time'
    end
  end

end
0 голосов
/ 30 июня 2011

Думайте о символах, как о строках, но с гораздо меньшими функциональными возможностями и поведением, как об объектах.Вы должны изменить свой код следующим образом:

def validates_end_is_after_start(*attr_names)
  start_hour = self.send(attr_names[0].to_sym).to_i
  end_hour = self.send(attr_names[1].to_sym).to_i
  # ... more code here
end

Вы также должны получить удивительный самоцвет validates_timeliness , который предназначен для проверки даты, времени и даты и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...