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 Active Record连接查询与排序和限制

脱离rails 使用Active Record

Rails 4 - 从已过滤的 Active Record 查询中删除属性

如何更改 Rails 中 Active Record 的默认时区?

Rails Active Record Query工作日总计离开