在我的Rails模型中分配值时,为什么需要使用self?

时间:2015-04-22 20:48:55

标签: 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

其中statusreserved_untilTicket模型的数据库中的字段,为什么我在分配值时只需使用self

3 个答案:

答案 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”