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方法,我想插入条件,因为在整个项目中我只需要一个排序
谢谢
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)