对这种方法中的自我意味着困惑

时间:2014-07-07 21:39:35

标签: ruby-on-rails ruby oop

我有以下代码正常工作,但我对原因感到有些困惑。

before_save :generate_slug

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

我的印象是在模型方法上使用self将是一个Class方法,而这些信息显然被保存到实例中,这是正确的吗?

如果我从self移除self.slug,则该方法无法正常工作且slugnil

因此,如果我需要self.slug才能使该方法有效,请在self上使用self.id& self.title.to_url也是?

1 个答案:

答案 0 :(得分:6)

在这种情况下,

self(在实例方法中)引用实际的实例对象。

方法名称中的

self(但是)表示该方法是一种Class方法。

如果您引用属性,则self.是可选的,但在您分配属性时需要slug = [id, title.to_url].join('-')

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

在实例方法

中创建一个新的局部变量
self

更新对象的slug属性。

您对idtitle不需要{{1}}的原因是因为他们没有被分配一个值,只是被访问过,所以解释员理解它必须得到模型属性。