浏览 598 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-11-27
首先我发表我的抗议: 之前在论坛发贴咨询过, 不知道这里的管理员到底怎么定义问题的难易, 轻易把问题划为"入门"问题. 真不知道有多入门的问题, 以至于大部分"高手"不愿意停留下脚步对此进行关注. 这个论坛Ruby本来就算不上人气热闹, 还按不知道哪里的管理员的喜好来强分层次, 以显示自己的水平之高, 品味之独特. 实在好笑. 类似现在留在版面的 http://www.javaeye.com/topic/143573 主题: 打折,促销,VIP,规则怎么处理? 如何获取当前function的名字 等等, 这在我看来何尝不是菜鸟的问题? 入门问题? 难道他们的帖子数就代表了他们能在非入门区发入门问题? 真是莫名其妙之极.
问题确实很简单, 一个model: User, 用户可以拥有自己的好友, 好友也是User. 这属于多对多的问题. 很好, 问题很简单, 很清楚, 多对多嘛, 换个语言, J2EE, .NET, 几句话的问题就能解决. 但在ROR里面真的简单吗? 首先, 你想到的也许是一个关系表: users_users 没错 然后你继续考虑增加关系. 你继续写 has_and_belongs_to_many :friends, :class_name => "User", :foreign_key => "friend_id" 这不就成了么? 不成. 当你执行 user.friends << User.create(:name => xxx) 后, user的id会映射到"friend_id"中, 你的朋友ID却存入了"user_id"之中. 离你的本意相差很远. 不过勉强它能运行了是不, 我们求其一些, 把friends更改为friended_with让自己别扭一下, 这总算是能工作了. 不过这会让我们非常之不享受. 好我们稍稍衍生一下问题. 我们现在不要那个关联表了, 它表达的意思不够明显, 我们要增加一个字段, 我们把users_users表给去了, 替换为friendships表, 我们增加了大量的附属信息. 例如用户之间的关系啊(他们到底是朋友还是仇人还是一个人想要成为另一个人的朋友, 但是另一个人并不在乎之类的)我们该怎么办呢?? 真心向各位高人请教关于自引用的处理方式. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-11-27
我会这样设计:
class User < ActiveRecord::Base has_many :friendships, :dependent => :destroy has_many :friends, :through => :friendships end class Friendship < ActiveRecord::Base belongs_to :user belongs_to :friend, :class_name => 'User', :foreign_key => 'friend_id' end @user = User.find(1) @friend = User.find(2) @user.friends << @friend @friend.friends << @user |
|
| 返回顶楼 | |
|
时间:2007-11-27
rainchen是正解。另外见这里:http://www.railsforum.com/viewtopic.php?pid=7958
你这个帖子应该不算简单,概念上有点绕,不过可以很容易google到答案。版规里写了能google到的问题就不要问了,所以可能有人根据这个投的入门贴?不一定是管理员操作的。
|
|
| 返回顶楼 | |
|
时间:2008-06-22
leondu 写道 rainchen是正解。另外见这里:http://www.railsforum.com/viewtopic.php?pid=7958
你这个帖子应该不算简单,概念上有点绕,不过可以很容易google到答案。版规里写了能google到的问题就不要问了,所以可能有人根据这个投的入门贴?不一定是管理员操作的。 很容易google到?你输入的是什么关键字呢?除了这个帖子,我没google别的有用的信息嘛 |
|
| 返回顶楼 | |
|
时间:2008-06-22
看一下rails的开源项目substract,一切基本问题都解决
|
|
| 返回顶楼 | |






