在正常的表设计的时候不会发现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的优化,值得大家阅读
ror实例ror实例ror实例
NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696
ror中文资料ror中文资料
ROR 架构介绍及了解
之前本人在windows 上搭建ROR环境,屡屡受挫,上网查资料、加入ruby on rails的qq群,关注ruby社区等,没有得到...的确很费力,后来在朋友的帮助下,成功搭建了,自己的一点小经验希望对ror有兴趣想学的朋友有帮助。
基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。
神经网络ror resenet模型 cifar10准确率89% cifar100准确率72%
RoR选题方向—源代码
家蚕Ror2基因的克隆与表达分析,刘伟,陈菲,Ror家族属于受体酪氨酸激酶中的孤儿受体,在进化上非常保守。本研究克隆了家蚕Ror2基因BmRor2的ORF序列,BmRor2基因的ORF为1924 bp,编码638
ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...
破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar
mysqlDriver4ror.rarmysqlDriver4ror.rarmysqlDriver4ror.rarmysqlDriver4ror.rar
excel lib ror ruby
一个牛b的ror文本编辑插件
我自己再开发时的笔记
Programming Ruby 2nd的英文原版!
Source.Insight.v3.50.0027-ROR.rar
单个组织记录由以下JSON结构表示: { "id":"https://ror.org/013cjyk83", "name":"PSL Research University", "email_address":null, "ip_addresses":[ ], "established":2010, "types":[ "Education" ], ...
亲密网络 一个 ROR 应用程序 天蓝色:#20B8E8(32、184、232)地球红色:#FF6699(255、102、153)森林黑色#000033(0、0、51)