如果我在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
其中status
和reserved_until
是Ticket
模型的数据库中的字段,为什么我在分配值时只需使用self
?
答案 0 :(得分:2)
因为如果你status = 'open'
,你正在创建一个名为status
的新局部变量。这不是关于Rails的。这是关于Ruby解释器如何评估您的代码。
答案 1 :(得分:1)
这里接受的答案很好地解释了它。 - &GT; When to use self in Model?
为了进一步深入阅读,这是一个很好的博客,清楚地说明了这一点。 http://www.railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/
答案 2 :(得分:0)
每当你想在self上调用setter方法时,你必须编写self.status =“open”。如果您只是写status =“open”,那么ruby解析器会将其识别为变量赋值,并从现在开始将状态视为局部变量。为了让解析器实现,你要调用一个setter方法,而不是分配一个局部变量,你必须写obj.status =“open”,所以如果对象是self,self.status =“open”