注册
登录
统计
帮助
RailsChina.com
»
Ruby on Rails
» [求助]关于has_one
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
[求助]关于has_one
alan874
Alan
中级会员
个人空间
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2008-5-9 18:39
只看该作者
[求助]关于has_one
请教大家 最近需要做一个功能 下面是大致的模型图
A表 B表 C表
↓ ↓ ↓has_one
[ D表 ]
A B 和 C 都有一个D 虽然我知道可以在C里面建立3个字段A_id\B_id\C_id就可以完成这样的功能
但是以后可能和D表的关联表很多 因为以后可能需要扩展
所以我准备用2个字段完成这样的关系
即item_id(记录A、B、C表的ID) item_type(记录类型A、B、C等类型)
比方说 D表里面某条记录 item_id = 9 item_type = A
我就可以知道 这条记录是志向A表 id=9的记录
这样写的时候 我create知道怎么写 但是destroy我却不知道应该如何去写
比方说A表中某一条记录被删除 对应的D表里面相应的一条记录也被删除
因为这样的关系has_one :A, :dependent => :destroy 并不能使用
不知道有没有什么其它的方法能够完成这样的功能? 或者说我这样设计有缺陷?
UID
1094
帖子
60
精华
0
积分
251
阅读权限
30
在线时间
23 小时
注册时间
2008-5-7
最后登录
2008-12-25
查看详细资料
TOP
keyword
版主
个人空间
发短消息
加为好友
当前离线
2
#
大
中
小
发表于 2008-5-10 13:41
只看该作者
我觉得这样做违背了rails的约定,还是支持第一种做法
def keyword; end
UID
637
帖子
169
精华
3
积分
706
阅读权限
100
在线时间
111 小时
注册时间
2007-7-24
最后登录
2008-9-14
查看详细资料
TOP
alan874
Alan
中级会员
个人空间
发短消息
加为好友
当前离线
3
#
大
中
小
发表于 2008-5-12 09:31
只看该作者
你的意思是
A B 和 C 都有一个D 虽然我知道可以在C里面建立3个字段A_id\B_id\C_id就可以完成这样的功能
这样的话 那我如果有更多的对象和D关联 那么不是得无限条的在D里面增加字段吗?
这样的话 单独模块的开发的话 感觉Rails扩展性不太强哦
UID
1094
帖子
60
精华
0
积分
251
阅读权限
30
在线时间
23 小时
注册时间
2008-5-7
最后登录
2008-12-25
查看详细资料
TOP
keyword
版主
个人空间
发短消息
加为好友
当前离线
4
#
大
中
小
发表于 2008-5-12 13:14
只看该作者
那你为什么有那么多表都要has_one D呢?
这是设计的问题,和rails没啥关系吧
def keyword; end
UID
637
帖子
169
精华
3
积分
706
阅读权限
100
在线时间
111 小时
注册时间
2007-7-24
最后登录
2008-9-14
查看详细资料
TOP
alan874
Alan
中级会员
个人空间
发短消息
加为好友
当前离线
5
#
大
中
小
发表于 2008-5-12 13:51
只看该作者
呵呵 问题解决了
这个属于多态关系 Polymorphic Associations
Agile.Web.Development.with.Rails.2nd.Edition.Dec.2006.pdf中 第349页详细的说明了这个问题
A的model里面 has_one: D , :as => :resource , :dependent => :destroy
D的model里面 belongs_to :resource, :polymorphic => true
这样就可以完成多态关系了
D 表中需要增加 resource_id resource_type 两个字段 用来记录A中的ID 与 类型
一直在翻这个书 终于发现了 原来Rails中的多态用法
UID
1094
帖子
60
精华
0
积分
251
阅读权限
30
在线时间
23 小时
注册时间
2008-5-7
最后登录
2008-12-25
查看详细资料
TOP
alan874
Alan
中级会员
个人空间
发短消息
加为好友
当前离线
6
#
大
中
小
发表于 2008-5-12 14:00
只看该作者
感谢keyword斑竹大人一直以来的关照
这个不是设计方面的问题
象这样的使用的话
我可以把功能分离出来
比方说 我做一个评论功能 然后使用这个功能 就可以直接去给项目中的某个功能增加上这个评论功能
也许是一篇文章的评论 也是一张图片的评论 这样的话 就算是真正的分离出模块来制作程序了
呵呵 上面只是打个比方 其实这样的使用应该很多地方都可以用到
上面把解决方法贴出来 希望大家以后遇到这样的情况可以少走弯路 就当是抛砖引玉了
UID
1094
帖子
60
精华
0
积分
251
阅读权限
30
在线时间
23 小时
注册时间
2008-5-7
最后登录
2008-12-25
查看详细资料
TOP
keyword
版主
个人空间
发短消息
加为好友
当前离线
7
#
大
中
小
发表于 2008-5-12 15:19
只看该作者
总结得不错,俺也学习啦。。。。哈哈
def keyword; end
UID
637
帖子
169
精华
3
积分
706
阅读权限
100
在线时间
111 小时
注册时间
2007-7-24
最后登录
2008-9-14
查看详细资料
TOP
hozaka
Hozaka.Guo
初级会员
个人空间
发短消息
加为好友
当前离线
8
#
大
中
小
发表于 2008-5-23 15:07
只看该作者
其实你应该先搜索一下,有没有其他人考虑过或者做过这方面的研究,甚至有可能已经有成熟的工具了?
如果是评论的话,搜索 acts_as_commentable ,看一下这个插件是怎么实现的
我就是鸡蛋黄……
UID
591
帖子
25
精华
0
积分
180
阅读权限
20
在线时间
7 小时
注册时间
2007-6-21
最后登录
2008-9-24
查看详细资料
TOP
alan874
Alan
中级会员
个人空间
发短消息
加为好友
当前离线
9
#
大
中
小
发表于 2008-5-24 16:48
只看该作者
非常感谢hozaka的建议
我接触Ruby on Rails不久
所以一些东西想自己多接触下 毕竟不是所有的功能都有plugin 有时候还是需要自己写一些功能
但是还是很感谢你的建议 我已经在看了
这个acts_as_commentable 我也比较感兴趣
UID
1094
帖子
60
精华
0
积分
251
阅读权限
30
在线时间
23 小时
注册时间
2008-5-7
最后登录
2008-12-25
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
== 站内业务区 ==
主机业务咨询
== 技术讨论区 ==
Ruby on Rails
Web开发
开发工具
部署与调优
社区资讯
== IT生活区 ==
招聘与合作
休闲小屋