Rails大写/小写对象

时间:2013-09-16 21:32:25

标签: ruby-on-rails ruby

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

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

2 个答案:

答案 0 :(得分: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

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

使用别人的比喻,想象一下房子和蓝图;该类是对象的蓝色打印,而房子则代表实例。该类的实例将拥有自己的一组属性(墙面颜色,窗口类型等)。

答案 1 :(得分:0)

这意味着什么?

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

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