Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 实例变量和setter方法-Ruby on Rails_Ruby On Rails - Fatal编程技术网

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这是一个哈希,但我必须查找它。很抱歉,目前我想不起这一切的最佳参考资料。