gpt4 book ai didi

ruby-on-rails - 通俗地说,Ruby on Rails ORM 是什么?请解释

转载 作者:行者123 更新时间:2023-12-03 07:46:24 24 4
gpt4 key购买 nike

我无法理解 Ruby on Rails 中的 ORM。据我了解,表/列和对象/属性之间存在 1:1 的关系。所以每条记录都是一个对象。另外,模型到底是什么?我知道它映射到一张 table 。

我真正追求的是对上述内容有更深入的理解。预先感谢您的帮助

我是一名从 PHP 转向 Ruby on Rails 的 Web 开发人员。

最佳答案

“据我了解,表/列和对象/属性之间存在 1:1 的关系。因此每条记录都是一个对象。”

这并不完全正确,除非您非常宽松地使用术语“对象”。表由建模,而表记录这些类的实例建模。

假设您有一个 clients 表,其中包含列 id (autonum) 和 name (varchar)。假设它只有一条记录,id=1 和 name="Ford"。然后:

  • 数据库表 clients 将映射到模型类 Client
  • 记录将映射到模型实例,这意味着您必须创建对象并将其分配给变量才能使用记录。最常见的方法是执行 ford = Client.find(1)
  • 表的两列将映射到 ford 变量上的方法。您可以执行ford.id,您将得到1。您可以执行ford.name,您将获得字符串“Ford”。您还可以通过执行 ford.name = "Chevrolet" 更改客户端的名称,然后通过执行 ford.save 将更改提交到数据库。

“模型到底是什么?我知道它映射到表”

模型只是带有很多用于操作数据库的非常有用的方法的类。以下是一些示例:

  • 验证:除了典型的数据库驱动验证(“该字段不能为空”)之外,您还可以在 ruby​​ 中实现非常复杂的验证(“该字段必须是有效的电子邮件”是最典型的一个)。验证在您对模型实例调用“保存”之前运行。
  • 关系:外键也可以映射到模型上。例如,如果您有一个通过外键与福特客户端关联的 brands 表(及其相应的 Brand 模型),您可以执行 ford.brands 您将获得一个对象数组,表示 Brands 表中 client_id = 1 的所有记录。
  • 查询:模型允许您在 ruby​​ 中创建查询,并将其转换为 SQL 本身。大多数人都喜欢这个功能。

这些只是一些示例。 Active record 提供了更多的功能,例如翻译、查询范围或对单表继承的支持。

最后但并非最不重要的一点是,您可以将自己的方法添加到这些类中。

模型是避免编写“意大利面条式代码”的好方法,因为您被迫按功能分离代码。

  • 模型处理数据库交互和业务逻辑
  • View 处理 html 渲染和用户交互
  • Controller 将模型与 View 连接起来

关于ruby-on-rails - 通俗地说,Ruby on Rails ORM 是什么?请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com