我想在从api保存对象之前将unix时间转换为人类时间。
但我无法访问我的方法format date
,它引起了我的注意:
未定义的方法`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 :(得分: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 :(得分:1)
您将以unix时间毫秒获取日期。你可以这样做
conference.date = DateTime.strptime(line['time'].to_s,'%Q')