Rails:模型中未定义的方法

时间:2016-07-02 15:29:29

标签: ruby-on-rails ruby activerecord methods rails-activerecord

我想在从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

2 个答案:

答案 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')