0

Ich möchte eine Unix-Zeit in menschliche Zeit konvertieren, bevor ich mein Objekt aus einer API speichern. Aber ich kann nicht auf meine Methode zugreifen format date, es mir erhöhen:Schienen: undefinierte Methode in Modell

nicht definierte Methode `format_date‘ für 1467738900000: Fixnum

Mein Modell:

class Conference < ActiveRecord::Base 
validates_presence_of :title, :date 
validates :date, :uniqueness => true 

def self.save_conference_from_api 
    data = self.new.data_from_api 
    self.new.parisrb_conferences(data).each do |line| 
     conference = self.new 
     conference.title = line['name'] 
     conference.date = line['time'].format_date 
     conference.url = line['link'] 
     if conference.valid? 
     conference.save 
     end 
    end 
    self.all 
end 

def format_date 
    DateTime.strptime(self.to_s,'%Q') 
end 
+0

Wie der Fehler suggeriert, ist 'line ['time']' eine Zahl, keine Instanz Ihrer Klasse 'Conference'. Und der Grund ist nicht in dem Code, den Sie gepostet haben. –

Antwort

1

line['time'] ist keine Instanz von Ihrer Conference Klasse, so können Sie nicht format_date Methode darauf aufrufen. Statt zum Beispiel können Sie format_date eine Klassenmethode machen:

def self.format_date str 
    DateTime.strptime(str.to_s,'%Q') 
end 

Und dann es so nennen:

conference.date = format_date(line['time']) 

Die andere Option ist eine before_validation Rückruf (Attribut Zuordnung zu verwenden, wird als folgt: conference.date = line['time'] und es besteht keine Notwendigkeit für format_date Methode):

before_validation -> r { r.date = DateTime.strptime(r.date.to_s,'%Q') } 
1

Sie erhalten das Datum in Unix-Zeit Millisekunden. Sie können so tun

+0

Danke für den Vorschlag, dass es meine erste Idee war, aber ich wollte eine Methode dafür machen. – Orsay