原文地址为http://guides.rubyonrails.org/association_basics.html,本文非译文,只是做一下简短的介绍。(RubyChina这部分还在翻译中……)。
ActiveModel的关联系一共有以下几种
- belongs_to
- has_one
- has_many
- has_many :through
- has_one :through
- has_and_belongs_to_many
而我们通常用的关系可归类为:
- 一对一
- 一对多
- 多对一
- 多对多
对于上述四种关系,可以采用不同的表结构进行完成
belongs_to
正向属于关系,比较简单,如表A belongs_to 表B
只需要 在表A中 增加一栏以”表B名_id“的栏位即可。如果有多个栏位需要关联,则使用外键关键字进行补充即可如
class Task < ActiveRecord::Base belongs_to :user belongs_to :follower, class_name: "User", foreign_key: "follower_id" end
has_one:
反向属于关系,比如上表A和表B的关系,如果是 A--》B 是一对一,反过来 B--》 A也是一对一,那么表B有两种设计方法:
- 在表B中也增加一个表A外键使用belongs_to 关键字
- 表B中不增加任何关键字,使用has_one关键字,去关联所有表A中外键栏位与表B id一直的记录
has_many:
和has_one基本一致,一对多,多对多使用。
has_many :through :
这个特殊,拿购物车举例子, 一般购物车的设计师 cart --> cart_item --> product 这样的三层关系
cart表内是不存在任何product的外键信息,但是从关系较多来说也是一对多的。
使用has_many :through相当于借了一下cart_item中的外键关系来使用。
class Cart <ActiveRecord::Base has_many :cart_items has_many :products , through: :cart_items end class CartItem < ActiveRecord::Base belongs_to: cart has_many: products end class Product < ActiveRecord::Base end
has_one :through
同上。
has_and_belongs_to_many
除了 has_many之外另外一种多对多关系的实现。
使用Ruby Guide的例子进行说明
通过has_many :through其实也可以达到同样的效果,只不过不那么自动……
各有好处
相关推荐
### Ruby on Rails 中 Model 关联详解 ...通过上述示例,我们可以清晰地看到如何在 Ruby on Rails 中定义和使用不同的关联关系。了解这些基本的关联模式及其应用场景,对于构建复杂的数据模型和关系至关重要。
本文将深入探讨 Redmine 的主要数据库表结构及其关联关系。 1. **用户(User)**: `users` 表包含了用户的个人信息,如 `auth_source_id` 用于标识用户认证来源,`hashed_password` 存储经过哈希处理的密码,`last_...
- **Active Record Associations**:深入探讨Active Record的关联关系管理,如一对一、一对多等关联类型。 #### 总结 《Rails 101S》不仅是一本适合新手入门的教程,也是进阶开发者的好帮手。通过实践这些基础知识...
在Rails中,数据库查询主要通过ActiveRecord来实现,这是一个强大的ORM(对象关系映射)工具,能够将数据库表与Ruby类关联,简化数据操作。 描述中虽然没有具体信息,但我们可以推测这可能是一篇关于Rails中查询...
在这个项目中,`User`和`Image`模型可能会与数据库中的相应表关联,通过定义属性和关系,如`has_many :images`表示一个用户可以拥有多个图片。 5. **路由配置**: Rails的路由系统将URL映射到控制器的行动上,如`/...
在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的...通过这个过程,开发者不仅可以学习到Rails的基本用法,还能掌握Web开发的通用实践和敏捷开发理念。
5. **ActiveRecord**:详述了ActiveRecord是如何作为对象关系映射(ORM)层工作的,包括模型定义、关联关系(如has_many、belongs_to等)、数据库迁移以及查询方法。 6. **测试驱动开发(TDD)**:Rails强调TDD,书...
比如,你可能需要自定义验证规则、关联关系、或者视图中的样式和布局。理解生成的代码结构,能够帮助你更高效地进行定制。 **5. CRUD Generator 2的优缺点** 优点: - 快速生成基本的CRUD功能,节省开发时间。 - ...
接着,书中会讲解Rails的基本组件,如路由(Routes)、控制器(Controllers)、模型(Models)和视图(Views),以及ActiveRecord ORM(对象关系映射)的工作原理。 在模型部分,你将学习如何定义数据库模型,使用...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”和“Don't Repeat Yourself”(DRY)原则,从而提高开发效率。 本教程首先会...
通过以上介绍可以看出,《Rails 敏捷开发实践》这本书不仅详细介绍了 Ruby on Rails 的基本概念和技术细节,还提供了丰富的实际案例和敏捷开发的最佳实践,对于想要深入了解 Rails 开发和敏捷方法的读者来说,是非常...
Rails是一个基于Ruby编程语言的开源Web应用程序框架,遵循MVC(Model-View-Controller)架构模式,致力于实现“约定优于配置”(Convention over Configuration, CoC)和“Don't Repeat Yourself”(DRY)的原则,极...
ActiveRecord的关联功能也是重点,它允许你轻松处理多对一、一对一、多对多的关系,简化了数据库操作。同时,你会学到如何使用Rails的验证机制来保证数据的完整性和一致性。 在部署方面,Rails 4支持Heroku、...
Rails的核心在于MVC设计模式,它将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责数据处理和业务逻辑,视图则呈现用户界面,而控制器作为两者之间的协调者,处理用户的请求并...
Rails 2.0加强了ActiveRecord的关联功能,如`has_many`, `belongs_to`, `has_one`等,使得数据关系管理更加便捷。 4. **视图(View)** 视图负责呈现用户界面。Rails 2.0支持ERB(Embedded Ruby)模板,允许开发者在...
- **ActiveRecord 基础**:创建模型、定义关联关系等。 - **查询数据库**:使用 ActiveRecord 提供的方法进行数据查询。 - **事务处理**:确保数据操作的完整性。 #### 第6章:进阶 ActiveRecord:增强你的模型 ...
2. **Rails框架**:了解Rails的MVC(Model-View-Controller)架构,以及路由、模型、控制器、视图之间的关系。 3. **ActiveRecord**:Rails中的ORM(对象关系映射)工具,用于处理数据库操作。你需要熟悉数据库模型...
- **最佳实践**:采用MVC(Model-View-Controller)架构模式,分离业务逻辑、数据管理和界面展示。 #### 六、课程大纲 本课程将涵盖Ruby on Rails的核心概念和技术细节,具体内容包括: - **周一**:安装Ruby on ...
Rails框架的核心是遵循MVC(模型-视图-控制器)设计模式,它将应用程序分为三个主要部分,模型(Model)、视图(View)和控制器(Controller),每部分都有其特定的职责。 Rails起步章节中提到了安装Rails的过程。...