众所周知,很多rails2的active record查询方法在rails3众已经不推荐使用,也就是说,过时了。那么,哪些写法在rails3.1众已经不推荐使用了呢?
这些不推荐使用的写法在rails3.1 release版中依然有效,但是将会在rails3.2中全面的移除,考虑到牵涉了比较多的代码修改,所以将会有一个官方的插件来支持他们。
简而言之,通过包含hash的任何ActiveRecord的类方法,都已经不推荐了,比如:
:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :having, :from, :lock
目前ActiveRecord提供了以下finder方法:
还有以下的计算方法:
进入rails3的世界,以上的方法都是不推荐使用的。这些方法将会在rails3.2中完整的移除。此外,find(:first) , find(:all) 也已经不推荐使用了,小小的例外是 count()方法依然接受 :distinct 参数。
下面是一些在 rails3中过时用法的例子:
User.find(:all, :limit => 1)
User.find(:all)
User.find(:first)
User.first(:conditions => {:name => 'lifo'})
User.all(:joins => :items)
但是以下的用法还是推荐使用的:
User.find(1)
User.find(1,2,3)
User.find_by_name('lifo')
此外,在rails2中使用率相当大的named_scope 也已经不推荐了
named_scope :red, :conditions => { :colour => 'red' }
named_scope :red, lambda {|colour| {:conditions => { :colour => colour }} }
with_scope, with_exclusive_scope 和 default_scope 也不推荐使用。
with_scope(:find => {:conditions => {:name => 'lifo'}) { ... }
with_exclusive_scope(:find => {:limit =>1}) { ... }
default_scope :order => "id DESC"
动态 scoped_by_ 也将会废弃。
red_items = Item.scoped_by_colour('red')
red_old_items = Item.scoped_by_colour_and_age('red', 2)
新的API
Rails3的 ActiveRecord 有以下的finder方法:
Chainability