Ruby on rails 实例变量和setter方法-Ruby on Rails
我正试图在如下方法中更新两个属性:Ruby on rails 实例变量和setter方法-Ruby on Rails,ruby-on-rails,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
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
from
和to
是持久化属性持久化属性不是简单的属性/实例变量
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
它们由ActiveRecord管理,设置它们时必须使用self.xxx
当阅读它们时,例如,
obj.from
,它调用由活动记录添加的访问者。您是否在您的类中使用attr\u访问者
作为from
和to
?如果它们是持久化属性,则必须使用self:持久化属性不是简单属性。但你没说它们是什么你是说我吗<代码>从和到被持久化attributes@juanpastas看看Dave的答案,他是对的。这是否会与持久属性的from-to冲突,是否有任何链接可以理解这是如何工作的?@MichaelSzyndel公平地说,从OP的帖子中最初并不清楚他们到底在做什么,因此,我给出了明确的评论。当我将obj.from
与attr\u访问器一起使用时,obj
中有一个实例变量@from
,对吗?所以在这种情况下ActiveRecord访问器没有定义这样的实例变量,对吗?有任何链接可以阅读这是如何工作的吗?@juanpstatas正确attr_访问器
创建getter和setter方法。持久化AR属性使用DB属性创建相同的方法,它们不使用实例变量,IIRC这是一个哈希,但我必须查找它。很抱歉,目前我想不起这一切的最佳参考资料。