1

我正在尝试以这样的方法更新两个属性:

def my_method
  @from = @to = Time.zone.now
end

但是当我调用这个方法时,我没有在 from 和 to 中获得设置值:

my_model.from => nil
my_model.to   => nil

有了这个它可以工作:

self.from = self.to = Time.zone.now

my_model.from => Sat, 20 Jul 2013 20:54:40 UTC 00:00
  1. 你知道为什么第一种方法不起作用吗?
  2. 你能给我一些关于这些之间区别的建议吗?他们怎么称呼?实例变量或 attr_accessors?实际上我需要帮助定义第二个问题。

更新

from并且to是持久属性

4

2 回答 2

1

持久属性不是简单的属性/实例变量。

它们由 ActiveRecord 管理,您必须self.xxx在设置它们时使用。

读取它们时,例如,obj.from它正在调用由活动记录添加的访问器。

于 2013-07-20T21:41:03.897 回答
-1
class Foo
  attr_reader :from, :to

  def my_method
    @from = @to = Time.now
  end
end

foo = Foo.new()
foo.my_method
puts foo.from  # => 2013-07-20 17:06:51 -0400
puts foo.to    # => 2013-07-20 17:06:51 -0400
于 2013-07-20T21:06:35.710 回答