0

Я бы хотел преобразовать время unix в человеческое время, прежде чем сохранять свой объект из api. Но я не могу получить доступ к моему методу format date, он воскресит меня:Rails: Неопределенный метод в модели

неопределенный метод `format_date» для 1467738900000: Fixnum

Моя модель:

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

Как следует из этой ошибки, 'line ['time']' является числом, а не экземпляром вашего класса 'Conference'. И причина не в коде, который вы опубликовали. –

ответ

1

line['time'] не является экземпляром вашего класса Conference, поэтому вы не можете вызвать метод format_date. Вместо этого, к примеру, вы можете сделать format_date методы класса:

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

А потом называют это так:

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

Другим вариантом заключается в использовании before_validation обратного вызова (назначения атрибута будет как следующим образом: conference.date = line['time'] и нет необходимости format_date метода):

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

Вы получаете дату в миллисекундах unix. Вы можете сделать это так:

conference.date = DateTime.strptime(line['time'].to_s,'%Q') 
+0

Спасибо за предложение, это была моя первая идея, но я хотел сделать способ сделать это. – Orsay

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