Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 为什么在Rails模型中赋值时需要使用self?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 为什么在Rails模型中赋值时需要使用self?

Ruby on rails 为什么在Rails模型中赋值时需要使用self?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如果我在Rails中有一个类: class Ticket < ActiveRecord::Base def update_status return if status == 'sold' return unless reserved_until.nil? || reserved_until.past? self.status = 'open' end end classticket 为了更深入地阅读,这是一个很好的博客,把它说得很清楚 哦,好吧,这完全有

如果我在Rails中有一个类:

class Ticket < ActiveRecord::Base
  def update_status
    return if status == 'sold'
    return unless reserved_until.nil? || reserved_until.past?
    self.status = 'open'
  end
end
classticket

如果
status
reserved\u until
Ticket
模型数据库中的字段,为什么我在赋值时只需要使用
self

每当你想在self上调用setter方法时,你必须写self.status=“open”。如果只写status=“open”,ruby解析器会将其识别为变量赋值,并从现在起将status视为局部变量。为了让解析器意识到,您希望调用setter方法,而不是分配局部变量,您必须编写obj.status=“open”,因此,如果对象是self,self.status=“open”

,因为如果您执行
status='open'
操作,您将创建一个名为
status
的新局部变量。这与Rails无关。这就是Ruby解释器如何评估代码的问题。

这里接受的答案很好地解释了它。->


为了更深入地阅读,这是一个很好的博客,把它说得很清楚

哦,好吧,这完全有道理。谢谢