我的模型看起来像这样:
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。
答案 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
方法中,这是最好的 初始化对象/类时