`
akiraray
  • 浏览: 90701 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails Model的基本关联关系

 
阅读更多

原文地址为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有两种设计方法:

  1. 在表B中也增加一个表A外键使用belongs_to 关键字
  2. 表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其实也可以达到同样的效果,只不过不那么自动……

各有好处

  • 大小: 48.2 KB
分享到:
评论

相关推荐

    ruby on rails中Model的关联详解

    ### Ruby on Rails 中 Model 关联详解 ...通过上述示例,我们可以清晰地看到如何在 Ruby on Rails 中定义和使用不同的关联关系。了解这些基本的关联模式及其应用场景,对于构建复杂的数据模型和关系至关重要。

    免费下载!!! ruby on rails -- redmine 项目的表结构详细说明以及关联关系

    本文将深入探讨 Redmine 的主要数据库表结构及其关联关系。 1. **用户(User)**: `users` 表包含了用户的个人信息,如 `auth_source_id` 用于标识用户认证来源,`hashed_password` 存储经过哈希处理的密码,`last_...

    Rails 101S

    - **Active Record Associations**:深入探讨Active Record的关联关系管理,如一对一、一对多等关联类型。 #### 总结 《Rails 101S》不仅是一本适合新手入门的教程,也是进阶开发者的好帮手。通过实践这些基础知识...

    rails查询学习笔记

    在Rails中,数据库查询主要通过ActiveRecord来实现,这是一个强大的ORM(对象关系映射)工具,能够将数据库表与Ruby类关联,简化数据操作。 描述中虽然没有具体信息,但我们可以推测这可能是一篇关于Rails中查询...

    Rails项目源代码

    在这个项目中,`User`和`Image`模型可能会与数据库中的相应表关联,通过定义属性和关系,如`has_many :images`表示一个用户可以拥有多个图片。 5. **路由配置**: Rails的路由系统将URL映射到控制器的行动上,如`/...

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的...通过这个过程,开发者不仅可以学习到Rails的基本用法,还能掌握Web开发的通用实践和敏捷开发理念。

    Rails 3 in Action

    5. **ActiveRecord**:详述了ActiveRecord是如何作为对象关系映射(ORM)层工作的,包括模型定义、关联关系(如has_many、belongs_to等)、数据库迁移以及查询方法。 6. **测试驱动开发(TDD)**:Rails强调TDD,书...

    [Rails 常用插件简介]CRUD Generator 2

    比如,你可能需要自定义验证规则、关联关系、或者视图中的样式和布局。理解生成的代码结构,能够帮助你更高效地进行定制。 **5. CRUD Generator 2的优缺点** 优点: - 快速生成基本的CRUD功能,节省开发时间。 - ...

    Apress - Practical Rails Projects (Oct 2007)

    接着,书中会讲解Rails的基本组件,如路由(Routes)、控制器(Controllers)、模型(Models)和视图(Views),以及ActiveRecord ORM(对象关系映射)的工作原理。 在模型部分,你将学习如何定义数据库模型,使用...

    Rails入门教程一(翻译).pdf

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”和“Don't Repeat Yourself”(DRY)原则,从而提高开发效率。 本教程首先会...

    Rails 敏捷开发实践

    通过以上介绍可以看出,《Rails 敏捷开发实践》这本书不仅详细介绍了 Ruby on Rails 的基本概念和技术细节,还提供了丰富的实际案例和敏捷开发的最佳实践,对于想要深入了解 Rails 开发和敏捷方法的读者来说,是非常...

    rails-1.0.0

    Rails是一个基于Ruby编程语言的开源Web应用程序框架,遵循MVC(Model-View-Controller)架构模式,致力于实现“约定优于配置”(Convention over Configuration, CoC)和“Don't Repeat Yourself”(DRY)的原则,极...

    Ruby on Rails 4 Tutorial 中文版

    ActiveRecord的关联功能也是重点,它允许你轻松处理多对一、一对一、多对多的关系,简化了数据库操作。同时,你会学到如何使用Rails的验证机制来保证数据的完整性和一致性。 在部署方面,Rails 4支持Heroku、...

    好用的rails 2.0 Api 文档

    Rails的核心在于MVC设计模式,它将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责数据处理和业务逻辑,视图则呈现用户界面,而控制器作为两者之间的协调者,处理用户的请求并...

    Rails API 文档

    Rails 2.0加强了ActiveRecord的关联功能,如`has_many`, `belongs_to`, `has_one`等,使得数据关系管理更加便捷。 4. **视图(View)** 视图负责呈现用户界面。Rails 2.0支持ERB(Embedded Ruby)模板,允许开发者在...

    Beginning Rails 4

    - **ActiveRecord 基础**:创建模型、定义关联关系等。 - **查询数据库**:使用 ActiveRecord 提供的方法进行数据查询。 - **事务处理**:确保数据操作的完整性。 #### 第6章:进阶 ActiveRecord:增强你的模型 ...

    inspinia admin - v2.5 Rails_Full_Version

    2. **Rails框架**:了解Rails的MVC(Model-View-Controller)架构,以及路由、模型、控制器、视图之间的关系。 3. **ActiveRecord**:Rails中的ORM(对象关系映射)工具,用于处理数据库操作。你需要熟悉数据库模型...

    ruby on rails 101

    - **最佳实践**:采用MVC(Model-View-Controller)架构模式,分离业务逻辑、数据管理和界面展示。 #### 六、课程大纲 本课程将涵盖Ruby on Rails的核心概念和技术细节,具体内容包括: - **周一**:安装Ruby on ...

    Ruby_On_Rails笔记

    Rails框架的核心是遵循MVC(模型-视图-控制器)设计模式,它将应用程序分为三个主要部分,模型(Model)、视图(View)和控制器(Controller),每部分都有其特定的职责。 Rails起步章节中提到了安装Rails的过程。...

Global site tag (gtag.js) - Google Analytics