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

Sam*_*son 1 ruby oop ruby-on-rails

我有以下代码可以工作,但我有点混淆为什么.

before_save :generate_slug

def generate_slug
  self.slug = [id, title.to_url].join('-')
end
Run Code Online (Sandbox Code Playgroud)

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

如果我删除self从self.slug方法不起作用,slug是nil.

所以,如果我需要self.slug工作方法应该使用selfon self.id&self.title.to_url以及?

Ste*_*zyn 6

self 在这种情况下(在实例方法中)指的是实际的实例对象.

self 在方法名称中(但是)表示该方法是一个Class方法.

self.如果您指的是属性,则它是可选的,但在分配属性时是必需的.

slug = [id, title.to_url].join('-')
Run Code Online (Sandbox Code Playgroud)

在实例方法中创建一个新的局部变量

self.slug = [id, title.to_url].join('-')
Run Code Online (Sandbox Code Playgroud)

更新对象的slug属性.

你不需要理由self的id或者title是因为他们没有被赋值,只是访问,所以解释明白它必须得到模型属性.