实例变量和setter方法 - Ruby on Rails

时间:2013-07-20 20:56:28

标签: ruby-on-rails

我试图在这样的方法中更新两个属性:

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?实际上我需要帮助来定义第二个问题。
  3. 更新

    fromto是持久属性

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-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