2015-04-22 57 views
-4

如果我有Rails中的一類:爲什麼在我的Rails模型中賦值時需要使用self?

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_until在數據庫中爲Ticket示範田,爲什麼我只需要使用self當我分配一個值?

回答

2

因爲如果你做status = 'open'你正在創建一個新的局部變量status。這不關於Rails。這是關於Ruby解釋器如何評估你的代碼。

+0

Oooh,好吧,總的來說。謝謝。 – ThomYorkkke

0

無論何時你想在self上調用setter方法,都必須寫self.status =「open」。如果你只寫了status =「open」,ruby解析器就認識到這是一個變量賦值,並且從現在開始將狀態視爲局部變量。對於解析器來說,你想調用一個setter方法,而不是分配一個局部變量,你必須寫obj.status =「open」,所以如果對象是self,self.status =「open」

相關問題