Я не могу вычесть две даты друг от друга, используя Ruby ... почему? - PullRequest
0 голосов
/ 24 августа 2010

это код, который у меня есть. Это метод для contact.rb (Контакт является моделью):

  def event_delay event
    # find instance of contact_event
    puts "+++++++++++++++inside event_delay method"
    event_class = event.class.name
    event_id = event_class.foreign_key.to_sym

    #puts event_id
    contact_event_class = "Contact#{event_class}".constantize
    #puts contact_event_class

    contact_event = contact_event_class.first(:conditions => 
                                                {:contact_id => self.id, 
                                                event_id => event.id})
    #puts "inspect contact_event"
    #puts contact_event.inspect 
    if !contact_event.nil?
       puts "---- #{contact_event.title} not nill"
       puts contact_event.id
       date_sent = contact_event.date_sent
       target_send_date = self.date_entered + event.days
       puts "date_sent:"
       puts date_sent.to_date
       puts "target send date:"
       puts target_send_date

       return date_sent - target_send_date
    end                                           

  end

Цель состоит в том, чтобы вернуть разницу в днях между временем date_sent и time_send_date. Но я получаю следующую ошибку:

undefined method `-@' for Sun, 08 Aug 2010:Date

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Может быть, оба значения не являются датами?Метод - определен, поэтому я думаю, что у вас может не быть двух дат.Это работает в IRB для вас?

irb(main):001:0> require "date"
=> true
irb(main):002:0> Date.new(2010, 10, 20) - Date.new(2010, 9, 20)
=> Rational(30, 1)
irb(main):003:0>
2 голосов
/ 29 апреля 2012

После перехода на Rails 3.2 я получил ту же странную ошибку при запуске спецификаций, но смог ее изолировать:

3.days.ago - Date.today
=> NoMethodError: undefined method `-@' for Sun, 29 Apr 2012:Date

3.days.ago 'создает объект ActiveSupport :: TimeWithZone,который (очевидно) не смешивается с объектом Date, который вам дает Date.today.

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