`
aegoose
  • 浏览: 40053 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

对ROR的一对一关系的理解

 
阅读更多

在正常的表设计的时候不会发现model引入一对一关系有逻辑问题,但要是遇上不正常的表设计,则要注意处理好model层的一对一关系.

场景:

1个用户拥有一个联系信息

user <--------------- 1:1---------------> contact

一对一的表设计可以把外键关系放在任意一个表.

case 1 将外键关系放在contact表上





对应model设置一对一关系





case 2 将外键关系放在user表上





对应model设置一对一关系





问题:

  观察case1 和 case 2, 可以发现,case1比较正常,表达了user为主表,contact为子表的关系.
然而事实上我们有些情况会将外键关系放在user表上,即case2的情况,而case的model里,却反映的是user表是contact表的一个子表,逻辑上会很奇怪.

问题分析:

这个实际反映出rails中的has_one和belongs_to两个方法的一些trick, 反映出ruby在引用这两个函数时的一些潜归则.

  • model A中使用 has_one B时, 要求目标表(B表)必须有A表的外键A_id
  • model A中使用belongs_to B时, 要求源表(A表)必须有B表的外键, B_id

这也是对的,数据表设计时本来就没有按正常的逻辑来设计表的外键关系(r),就必须遵遁ROR的函数规则.


stackoverflow也讲到这一点了:http://stackoverflow.com/questions/861144/ruby-on-rails-has-one-question



所以要特别注意一下.


分享到:
评论

相关推荐

    ror实例

    "ror实例"可能指的是在学习或实践中,通过创建一个具体的Rails应用程序来理解和掌握RoR的工作原理和最佳实践。 在Ruby on Rails中,重要知识点包括: 1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目...

    RoR选题方向—源代码

    Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程...通过深入源代码,开发者不仅能提高RoR的使用技巧,还能对Web开发有更全面的理解。

    我的ror的第一天

    标题 "我的ror的第一天" 暗示了这是一个关于Ruby on Rails (RoR) 开发初体验的分享,其中可能涵盖了作者初次接触RoR时的学习过程、遇到的问题以及解决方法。Rails是Ruby的一个Web开发框架,它以MVC(模型-视图-控制...

    RoR 培训课程PPT

    - **关联、验证及回调**:深入讲解ActiveRecord中的关联关系(如一对一、一对多等),以及如何进行数据验证和回调函数的应用。 - **ActionView表单**:学习如何在视图层构建动态表单,利用ActionView提供的模板...

    机遇ROR 的图书管理系统

    通过学习和实践《机遇ROR的图书管理系统》,你不仅能掌握Ruby on Rails的核心技能,还能提升对Web开发整体流程的理解,为未来开发更复杂的Web应用打下坚实基础。而提供的"EasyKey1.1.exe"可能是用于辅助学习的工具,...

    freemis 基于ror框架的mis

    2. **ActiveRecord**:这是RoR中的一个ORM(对象关系映射)库,允许开发者用Ruby类来代表数据库表,通过面向对象的方式来操作数据库,简化了数据库交互。 3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成...

    基于sqlite的ror例子

    2. `ActiveRecord`:RoR的ORM(对象关系映射)库,负责处理数据库操作,如CRUD(创建、读取、更新、删除)。 3. 数据库迁移:使用`rails generate migration`创建迁移文件,通过`db:migrate`命令执行数据库结构的...

    ASP.NET项目移植ROR实践----DB转移(已完成)

    它需要对两种框架都有深入的理解,以及熟悉数据库迁移和对象关系映射的技巧。`Ado2Rails`这样的工具可以提供帮助,但开发者仍需具备扎实的技术基础和实践经验,以确保迁移过程的顺利进行。在实际操作中,一定要谨慎...

    ror培训第4天 -model1

    在本篇"ror培训第4天 -model1"中,我们聚焦于Model中的Active Record,这是一个强大的对象关系映射(ORM)工具,使得开发者可以使用Ruby语言来操作数据库,而无需直接编写SQL语句。 Active Record的迁移...

    计算机软件-编程源码-FOXPRO ROR WINDOWS 高级成程序设计技术.zip

    FOXPRO,全称Visual FoxPro,是微软公司推出的一种关系数据库管理系统,它具有强大的编程能力,支持面向对象编程,并且在Windows操作系统环境下运行良好。"ROR"可能是“ Rapid Object-Oriented Reporting”的缩写,...

    ruby_on_rails_learning:我的RoR笔记本

    这个"ruby_on_rails_learning:我的RoR笔记本"是某位开发者的学习记录,反映了他从初级到进阶的过程中对RoR的理解和实践经验。 在RoR中,"模型"负责处理数据和业务逻辑,通常与数据库交互;"视图"则负责展示用户界面...

    rubyonrails实践

    例如,创建一个User模型并定义其与Post模型的一对多关系。 视图(View)是用户界面的呈现部分,主要由ERB(Embedded Ruby)模板构成。在这里,开发者可以将数据与HTML代码结合,生成动态页面。Rails的辅助方法(如...

    twitch:使用RoR 4.2.2的类似app的twitter

    例如,`User`和`Tweet`模型可能通过一对多关联建立关系,表示一个用户可以有多个推文。 7. **安全性** - 应用需要保护用户数据,防止跨站脚本(XSS)和SQL注入攻击。RoR提供了安全性的最佳实践,如使用`h`和`...

    Ruby on Rails Tutorial 原版

    **数据库知识**:RoR利用ActiveRecord,这是一个ORM(对象关系映射)库,将数据库操作与Ruby对象关联起来。了解数据库的基本操作,如SQL查询,对于创建数据驱动的Web应用至关重要。 **Web开发基础**:你需要对...

    ROR-Bookmarks

    《Ruby on Rails实战:ROR-Bookmarks项目详解》 ...通过分析和实践"ROR-Bookmarks"项目,开发者不仅可以深化对Ruby和Rails的理解,还能学习到API设计、数据库管理、前端集成等多个方面的知识,进一步提升Web开发技能。

    ruby on rails

    这本书对于理解Ruby语言和其在RoR中的应用至关重要。 **Ruby语言入门教程** 提供了对Ruby的基础介绍,包括变量、数据类型、控制结构、函数、类和对象等基础知识。了解这些基础是学习RoR的前提,因为RoR充分利用了...

    Ruby_on_Rails快速Web应用开发实战

    ActiveRecord是RoR的核心组件之一,它是对象关系映射(ORM)系统,允许开发者通过面向对象的方式与数据库交互。每个ActiveRecord类都代表数据库中的一个表,类的实例对应表中的一行,类的属性对应表的列。通过...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    11.2.1 一对一关系 136 11.2.2 一对多关系 137 11.2.3 多对多关系 139 11.2.4 继承关系 141 11.2.5 合成关系 143 11.3 数据库查询小结 143 11.3.1 GORM提供了便捷的 查询方法 143 11.3.2 基于HQL的查询 145 11.4 对...

    Ruby For Rails(英文版)(清晰文字pdf)

    Black是一位世界级的Ruby专家,他不仅对Ruby语言有深刻的理解,而且对如何将这种理解应用于Rails的实际开发中有着独到的见解。 - **学习价值**:正如Ruby on Rails之父David Heinemeier Hansson所强调的,要充分...

Global site tag (gtag.js) - Google Analytics