2010-05-24 32 views
2

我不明白这个小东西:为什么MyModel.all在Rails中工作?

假设,我们有 “条件” 的模式

class Condition < ActiveRecord::Base 
end 

为什么Condition.all作品?

Condition.all.each { |p| do_something } 

这句法告诉我们,我们有“条件”的类对象实例化的地方?

或者它是一些约定配置情况?

我问这个,因为我想重写Condition.all方法来返回条件,按“created_at”字段值排序?

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

感谢

回答

7

Person.all仅仅是Person.find(:all)一个别名(请参阅文档here)。

all,就像find一样,是ActiveRecord::Base上的一个类方法,所以不需要实例来调用。

更新

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

class Condition < ActiveRecord::Base 
    def self.all(*args) 
    # overridden implementation here 
    end 
end 

如果你不明确的实例方法与类方法读this blog post这是一个很好的总结,

不过,如果你只是想指定一个默认排序你不需要这样做。你可以只用default_scope

class Condition < ActiveRecord::Base 
    default_scope :order => 'created_at' 
end 
+0

我chnaged人到条件更好的体现,我在我的文章中加入现在。 但是,关于“.all” - 为什么我们不写“Conditions :: all”。是条件 - 是否已经实例化类对象? – AntonAL 2010-05-24 08:13:24

+0

我如何覆盖它? “def all”不起作用... – AntonAL 2010-05-24 08:16:23

+0

好吧,当它不需要实例来调用时,为什么我们像实例一样调用“all”?为什么不“::全部”? – AntonAL 2010-05-24 08:27:31

相关问题