Active Record介绍

六 13th, 2011

通俗点说Active Record就是为Ruby提供了CRUD(增删改查)操作的一个rubygem。有点类似于Java界的Hibernate和MyBatis,但功能和灵活性要强大的多。

技术上准确地定义是“一个实现了对象关系映射(ORM)模型为ROR提供业务对象与数据库表之间映射关系的Rubygem”。

要注意二点:

1、Active Record和Rails的关系:开发ROR系统一定需要Active Record。但是Active Record不一定只能用于ROR,它完全可以单独使用。

2、Rails可以直接写SQL查询,但是不建议这么做,实际上也没有必要这么做,因为Active Record已经足够强大满足你大部分需求。

Active Record 3.0.*包含以下几方面内容

Attributes Methods
Callbacks
Dirty
Errors
Naming
Observing
Serialization
Translation
Validations

下面将对Active Record分四方面介绍,分别为CRUD

***********Read***********
Finding Records
find(:id[, :id...]) 查找一条记录
如果记录不存在,抛出RecordNotFount异常
begin
Article.find(1034)
rescue ActiveRecord::RecordNotFound
puts “We couldn’t find that record”
end
find(:all)�0�2�0�2�0�2 �0�2�0�2�0�2 �0�2�0�2�0�2 查找所有记录
find(:first)�0�2�0�2�0�2 �0�2�0�2�0�2 查找第一条记录
find(:last)�0�2�0�2�0�2 �0�2�0�2�0�2 �0�2�0�2�0�2 查找最后一条记录
Article.order(‘published_at DESC’).limit(2)�0�2�0�2�0�2 返回倒序排列的前两行
Article.where(:title => ‘railsbook’)[.first/.all/.last]�0�2�0�2�0�2 按条件查询
Article.where(“title = ‘railsbook’ OR body NOT LIKE ‘%model%’”) 用SQL代码
用SQL代码容易被注入,建议用Array Condition Syntax
法一:用?问号
Article.where(“published_at < ? OR body LIKE ?”, Time.now, ‘%model%’)
法二:命名
Article.where(“title LIKE :search OR body LIKE :search”, {:search => ‘%soon%’})
Article.where(“published_at < ?”, Article.last.created_at).to_sql 返回SQL语句
注:where并不会立即执行SQL,而是返回ActiveRecord:Relation,Lazy Loading,对数据进行操作时才执行SQL,如.all/.first/.last
Rails 3中尽量用where(),少用find()
****Dyanmic Finders********
在运行时自动创建方法,这些方法本来是不存在的
find_by_*(:cond)�0�2�0�2�0�2 �0�2�0�2�0�2 eg:�0�2�0�2�0�2 find_by_title(‘BookRails’)�0�2�0�2�0�2 #=> 返回一个
find_all_by_*(:cond)�0�2�0�2�0�2 返回一个Array
find_by_*_and_*(:cond1, :cond2)�0�2�0�2�0�2 eg: find_by_title_and_name(“Book”, “soon”) #=>返回一个
find_all_by_*_and_*(:cond1, :cond2)
***********Update***********
法一:
>> article = Article.first
>> article.title = “newTitle”
>> article.save
法二:
>> article = Article.first
>> article.update_attributes(:title => “newTitle”)

***********Create***********
法一:
>> article = Article.new
>> article.title = “titleBook”
>> aritcle.body = “bodyBook”
>> article.save
法二:
>> article = Article.new(:title => “titleBook”, :body => “bodyBook”)
>> article.save
法三:
>> Article.create(:title => “titleBook”, :body => “bodyBook”)
***********Delete***********
destroy: 先查找到一条记录,然后再删除这条记录,并返回删除的记录
>> Article.last.destroy
>> Article.destroy(1)
delete:直接对表进行操作,并不把记录放入内存,返回删除的记录个数
>> Article.delete([3, 4]):删除id=3和id=4的记录
>> Article.delete_all(“published_at” < ’2011-01-01′)
****************errors*****************
当对数据进行增加修改时,如果产生错误会自动把错误放到article.errors中
你也可以自己添加errors: errors.add(column_name, error_msg)
>> article.errors.any? :如果操作有错误返回true,否则返回false
>> article.errors.full_messages: 错误集合数组
>> article.errors.size: 错误个数

 

 

 

有点类似于Java界的Hibernate和MyBatis,但功能和灵活性要强大的多。
标签:
>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:Active Record介绍
目前还没有任何评论.