2014-07-07 55 views
1

我有以下代碼工作但我略有困惑,爲什麼。困惑在這種方法的自我意味着什麼

before_save :generate_slug 

def generate_slug 
    self.slug = [id, title.to_url].join('-') 
end 

我的印象是一個模型方法使用self將是一個類的方法,而該信息顯然是被保存到一個實例,這是正確的?

如果我從self.slug中刪除self,則此方法不起作用,slugnil

所以,如果我需要self.slug的方法應該是使用selfself.id & self.title.to_url以及工作?

回答

6

self在這種情況下(在一個實例方法中)指的是實際的實例對象。

self在方法名稱(但是)中指示該方法是一個Class方法。

如果您引用的是屬性,則self.是可選的,但在分配屬性時是必需的。

slug = [id, title.to_url].join('-') 

會在實例方法

self.slug = [id, title.to_url].join('-') 

更新對象的蛞蝓屬性新的本地變量。

你不需要self的原因是idtitle是因爲它們沒有被賦值,只是被訪問,所以解釋器知道它必須獲得模型屬性。