Rails 中的 Active Record 和 ORM 有啥区别?
Posted
技术标签:
【中文标题】Rails 中的 Active Record 和 ORM 有啥区别?【英文标题】:What is the Difference between Active record and ORM in rails?Rails 中的 Active Record 和 ORM 有什么区别? 【发布时间】:2016-11-28 11:44:49 【问题描述】:Actice Record 和 ORM 有什么区别吗?一些文件说两者都是一样的。真的吗?
【问题讨论】:
activerecord 是 ORM 的一个例子 【参考方案1】:对象关系映射(ORM) 是一种使用面向对象的编程语言访问关系数据库的技术。对象关系映射是一种通过将数据库表“映射”到类并将类的实例“映射”到这些表中的行来管理数据库数据的方法。
Active Record 只是这样的 ORM 之一,其他包括:
续集 数据映射器 斯奎尔 Ruby 对象映射器等在此处阅读更多信息https://github.com/learn-co-students/active-record-mechanics-crud-v-000#orm-vs-active-record
【讨论】:
【参考方案2】:对象关系映射 (ORM):
简化应用程序中数据库的使用。
使用对象来保存数据库记录
-
数据库中每个表一个类
类的对象对应表中的行
对象的属性对应于行中的列
管理对象和后端数据库之间的信息移动。 管理表(连接)之间的关系,转换成链接的数据结构。ActiveRecord 基础知识
Model:对应数据库表的 Rails 类 活动记录:
Rails 中模型的基类 实现对象关系映射示例表
<table>
<tbody>
<tr>
<th> id </th>
<th>name</th>
<th>birth</th>
<th>gpa</th>
<th>grade</th>
</tr>
</tbody>
<tbody>
<tr>
<td> 1 </td>
<td> Anderson </td>
<td> 1987-10-22 </td>
<td> 3.9 </td>
<td> 2009 </td>
</tr>
<tr>
<td> 2 </td>
<td> Jones </td>
<td> 1990-04-16</td>
<td> 2.4 </td>
<td> 2012 </td>
</tr>
</tbody>
</table>
为这个表创建一个类(app/models/student.rb):
class Student < ActiveRecord::Base
end
或者,只需使用脚本/生成程序:
ruby script/generate model student
ActiveRecord 会检查此表的数据库架构,并自动在类中提供适当的属性和方法
【讨论】:
【参考方案3】:我认为这是一个非常简单的问题,所以我会坚持一个简单的回答:
ActiveRecord 是 ruby 语言的 ORM。 并非所有 ORM 都在 ruby 中,例如 Django ORM 在 python 中 除了 ActiveRecord 之外还有其他 ruby ORM:https://www.ruby-toolbox.com/categories/orm=> ActiveRecord ⊂ ruby ORMs ⊂ ORMs
【讨论】:
以上是关于Rails 中的 Active Record 和 ORM 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 和 Active Record:复杂的 SQL 查询
Rails 4 - 从已过滤的 Active Record 查询中删除属性