Rails 4 attr_accessor不适用于多种方法

时间:2014-04-15 02:33:41

标签: ruby-on-rails ruby model attr-accessor

我的模型看起来像这样:

class Job < ActiveRecord::Base
  attr_accessor :start_time

  def start_time
    self.start_time = Time.now
  end

  def elapsed_time
    end_time = Time.now
    elapsed = end_time - self.start_time
  end

end

我想测量经过的时间,self.start_time方法中存在start_time。但是,在我的elapsed_time方法中,self.start_time为零。那是为什么?

我使用的是rails 4.1.0和ruby 2.0.0。

2 个答案:

答案 0 :(得分:1)

使用initialize:

创建作业对象时,需要定义start_time
class Job < ActiveRecord::Base
  attr_accessor :start_time

  def initialize
    self.start_time = Time.now
  end

  def elapsed_time
    end_time = Time.now
    elapsed = end_time - self.start_time
  end

end

如果您不想在初始化作业时绑定start_time,则需要创建一个实例变量来保存开始时间,并在调用{{1时方法:

elapsed_time

答案 1 :(得分:0)

Beartech的答案是对的,但让我解释原因:

  

attr_accessor创建setter&amp;您的getter方法   模型。就像定义db属性一样,这些创建了   您调用对象(@object.method)的方法,意思是它们   仅在创建对象时创建

     

您的问题是您依赖attr_accessor来坚持   在对象实例之间,这意味着数据之间不会存在   要求。正如beartech所解释的那样,解决这个问题的方法是以某种方式   将数据“存储”在start_time方法中,这是最好的   初始化对象/类时