当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

Rails3的ActiveRecord 查询API

   众所周知,很多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方法:

  • find(id_or_array_of_ids, options)
  • find(:first, options)
  • find(:all, options)
  • first(options)
  • all(options)
  • update_all(updates, conditions, options)

   还有以下的计算方法:

  • count(column, options)
  • average(column, options)
  • minimum(column, options)
  • maximum(column, options)
  • sum(column, options)
  • calculate(operation, column, options)

  

    进入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方法:

  • where (:conditions)
  • having (:conditions)
  • select
  • group
  • order
  • limit
  • offset
  • joins
  • includes (:include)
  • lock
  • readonly
  • from

Chainability

相关内容
赞助商链接