在正常的表设计的时候不会发现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实例"可能指的是在学习或实践中,通过创建一个具体的Rails应用程序来理解和掌握RoR的工作原理和最佳实践。 在Ruby on Rails中,重要知识点包括: 1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目...
Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程...通过深入源代码,开发者不仅能提高RoR的使用技巧,还能对Web开发有更全面的理解。
标题 "我的ror的第一天" 暗示了这是一个关于Ruby on Rails (RoR) 开发初体验的分享,其中可能涵盖了作者初次接触RoR时的学习过程、遇到的问题以及解决方法。Rails是Ruby的一个Web开发框架,它以MVC(模型-视图-控制...
- **关联、验证及回调**:深入讲解ActiveRecord中的关联关系(如一对一、一对多等),以及如何进行数据验证和回调函数的应用。 - **ActionView表单**:学习如何在视图层构建动态表单,利用ActionView提供的模板...
通过学习和实践《机遇ROR的图书管理系统》,你不仅能掌握Ruby on Rails的核心技能,还能提升对Web开发整体流程的理解,为未来开发更复杂的Web应用打下坚实基础。而提供的"EasyKey1.1.exe"可能是用于辅助学习的工具,...
2. **ActiveRecord**:这是RoR中的一个ORM(对象关系映射)库,允许开发者用Ruby类来代表数据库表,通过面向对象的方式来操作数据库,简化了数据库交互。 3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成...
2. `ActiveRecord`:RoR的ORM(对象关系映射)库,负责处理数据库操作,如CRUD(创建、读取、更新、删除)。 3. 数据库迁移:使用`rails generate migration`创建迁移文件,通过`db:migrate`命令执行数据库结构的...
它需要对两种框架都有深入的理解,以及熟悉数据库迁移和对象关系映射的技巧。`Ado2Rails`这样的工具可以提供帮助,但开发者仍需具备扎实的技术基础和实践经验,以确保迁移过程的顺利进行。在实际操作中,一定要谨慎...
在本篇"ror培训第4天 -model1"中,我们聚焦于Model中的Active Record,这是一个强大的对象关系映射(ORM)工具,使得开发者可以使用Ruby语言来操作数据库,而无需直接编写SQL语句。 Active Record的迁移...
FOXPRO,全称Visual FoxPro,是微软公司推出的一种关系数据库管理系统,它具有强大的编程能力,支持面向对象编程,并且在Windows操作系统环境下运行良好。"ROR"可能是“ Rapid Object-Oriented Reporting”的缩写,...
这个"ruby_on_rails_learning:我的RoR笔记本"是某位开发者的学习记录,反映了他从初级到进阶的过程中对RoR的理解和实践经验。 在RoR中,"模型"负责处理数据和业务逻辑,通常与数据库交互;"视图"则负责展示用户界面...
例如,创建一个User模型并定义其与Post模型的一对多关系。 视图(View)是用户界面的呈现部分,主要由ERB(Embedded Ruby)模板构成。在这里,开发者可以将数据与HTML代码结合,生成动态页面。Rails的辅助方法(如...
例如,`User`和`Tweet`模型可能通过一对多关联建立关系,表示一个用户可以有多个推文。 7. **安全性** - 应用需要保护用户数据,防止跨站脚本(XSS)和SQL注入攻击。RoR提供了安全性的最佳实践,如使用`h`和`...
**数据库知识**:RoR利用ActiveRecord,这是一个ORM(对象关系映射)库,将数据库操作与Ruby对象关联起来。了解数据库的基本操作,如SQL查询,对于创建数据驱动的Web应用至关重要。 **Web开发基础**:你需要对...
《Ruby on Rails实战:ROR-Bookmarks项目详解》 ...通过分析和实践"ROR-Bookmarks"项目,开发者不仅可以深化对Ruby和Rails的理解,还能学习到API设计、数据库管理、前端集成等多个方面的知识,进一步提升Web开发技能。
这本书对于理解Ruby语言和其在RoR中的应用至关重要。 **Ruby语言入门教程** 提供了对Ruby的基础介绍,包括变量、数据类型、控制结构、函数、类和对象等基础知识。了解这些基础是学习RoR的前提,因为RoR充分利用了...
ActiveRecord是RoR的核心组件之一,它是对象关系映射(ORM)系统,允许开发者通过面向对象的方式与数据库交互。每个ActiveRecord类都代表数据库中的一个表,类的实例对应表中的一行,类的属性对应表的列。通过...
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 对...
Black是一位世界级的Ruby专家,他不仅对Ruby语言有深刻的理解,而且对如何将这种理解应用于Rails的实际开发中有着独到的见解。 - **学习价值**:正如Ruby on Rails之父David Heinemeier Hansson所强调的,要充分...