Rails系列教程(4):Object/Relational Mapping

上一篇 / 下一篇  2008-02-02 15:52:12 / 个人分类:RoR

ORM:ORM libraries 是把 database tables 与 classes间产生一种mapping(映射),并不像ORM本身表示的Object /Relation Mapping,不是对象和关系的映射,在概念上来说,Relations 更像是 Classes

 

具体来说说什么是mapping:

假如database 有一个table---orders,那么就会有一个类Order与之对应,我们知道,database约定了table name使用复数,而类不需要,所以,这里才会有单复数的区别,这个不是当当为了满足程序员的习惯,同时是为了满足数据库设计人员的习惯(关于数据库命名《Database Principles Programming and Performance》一书中有提到)

 

术语的对应关系:

object --- row

attributes用于set,get column

 

Rails使得我们从table-level 操作转化到 class-level。

这样对描述毕竟还是很难了解一些深度的东西,下面举例:

order = Order.find(1)

puts "Order #{order.customer_id}, amount=#{order.amount}"

 

我们可以清楚看到前面说过的,order(object)对应的是一些行,这里Order这个class method返回一个order object,这个object可以使用attributes,来access一些columns,注意这里的object可以对应row,也可以对应rows,比如 ōrder = Order.find_al,但是rows不能通过一个object(对应row的)来保存,所以这里Class method返回的是一个collection,这个collection里面保存的是Order类型的object,为了更加详细的说明collection,这里有一个更加容易理解的例子:

 

读取数据:

Order.find(:all, :conditions => "name='dave'") do |order|

  puts order.amount

end

写入数据:

Order.find(:all, :conditions => "name='dave'") do |order|

  order.discount = 0.5

  order.save                              #method save()

end

 

#the objects corresponding to individual rows in a table

 

总结就是一句话:

So an ORM layer maps tables to classes, rows to objects, and columns to attributes of those objects.

注意,全部的对应关系,都是1对1,一个class对应一个table,一个row对应一个object,一个attribute对应一个column


TAG: RoR

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22994
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar