0

这是一个相当基本的 Ruby/Rails 问题,但我不确定为什么在某些情况下调用对象的类与在框架的不同位置调用该对象的实例会有所不同。

假设您有一个模型,例如Product,您称Product.new您有一个新的类实例。但是,如果您在模型中定义了某些方法,我似乎只能在调用 Class 而不是实例时访问这些方法,例如Product.where(param, param)。但我不能打电话product.where(param, param)- 为什么会这样?

4

2 回答 2

1

有两种类型的方法:类方法和实例方法。您必须在正确的对象上调用适当的方法。

class Product
  def self.foo
    # class method, only callable on Product
  end

  def name
    # instance method, callable on an instance of Product.
  end
end

如果您尝试在类上调用实例方法,反之亦然,您将看到未定义的方法错误。

用别人的比喻,想象一栋房子和一张蓝图;类是对象的蓝图,而房子代表实例。该类的一个实例将有它自己的一组属性(墙壁颜色、窗口类型等)。

于 2013-09-16T21:35:33.090 回答
0

这意味着什么?

p = Product.find(1)
p.where('something == 2')

这没有任何意义,你有一个实例,你在查询什么?良好的 API 设计会导致在有意义的地方定义方法。

于 2013-09-16T21:35:29.957 回答