为什么MyModel.all在Rails中工作?

Ant*_*nAL 2 methods model ruby-on-rails

我不明白这件小事:

假设,我们有"条件"模型

class Condition < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

为什么Condition.all有效?

Condition.all.each { |p| do_something }
Run Code Online (Sandbox Code Playgroud)

这个语法告诉我们,我们在某个地方有"条件"类对象实例化了吗?

或者是配置案例的约定?

我问这个,因为我想覆盖Condition.all方法返回条件,按"created_at"字段值排序?

我不需要使用sort方法,我想插入条件,因为在整个项目中我只需要一个排序

谢谢

mik*_*kej 7

Person.all只是一个别名Person.find(:all)(请参阅此处的文档).

all,就像find,是一个类方法,ActiveRecord::Base因此不需要实例才能被调用.

更新

要覆盖类方法,您需要记住self.前缀.例如你可以all像这样覆盖:

class Condition < ActiveRecord::Base
  def self.all(*args)
    # overridden implementation here
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您不清楚实例方法与类方法,请阅读此博客文章,这是一个很好的总结,

但是,如果您只想指定默认顺序,则不需要执行此操作.你可以使用default_scope:

class Condition < ActiveRecord::Base
  default_scope :order => 'created_at'
end
Run Code Online (Sandbox Code Playgroud)