【问题标题】:Confused over what self means in this method [duplicate]对这种方法中 self 的含义感到困惑 [重复]
【发布时间】:2014-07-07 21:39:35
【问题描述】:

我有以下代码有效,但我对为什么有点困惑。

before_save :generate_slug

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

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

如果我从self.slug 中删除self,则该方法不起作用,slugnil

因此,如果我需要 self.slug 以使该方法起作用,那么在 self.idself.title.to_url 上也应使用 self 吗?

【问题讨论】:

    标签: ruby-on-rails ruby oop


    【解决方案1】:

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

    方法名中的self(但是)表示该方法是类方法。

    self. 在引用属性时是可选的,但在分配属性时是必需的。

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

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

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

    更新对象的 slug 属性。

    idtitle 不需要 self 的原因是因为它们没有被分配值,只是被访问,因此解释器知道它必须获取模型属性。

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多