我有以下代码正常工作,但我对原因感到有些困惑。
before_save :generate_slug
def generate_slug
self.slug = [id, title.to_url].join('-')
end
我的印象是在模型方法上使用self
将是一个Class方法,而这些信息显然被保存到实例中,这是正确的吗?
如果我从self
移除self.slug
,则该方法无法正常工作且slug
为nil
。
因此,如果我需要self.slug
才能使该方法有效,请在self
上使用self.id
& self.title.to_url
也是?
答案 0 :(得分:6)
self
(在实例方法中)引用实际的实例对象。
self
(但是)表示该方法是一种Class方法。
如果您引用属性,则self.
是可选的,但在您分配属性时需要slug = [id, title.to_url].join('-')
。
self.slug = [id, title.to_url].join('-')
在实例方法
中创建一个新的局部变量self
更新对象的slug属性。
您对id
或title
不需要{{1}}的原因是因为他们没有被分配一个值,只是被访问过,所以解释员理解它必须得到模型属性。