【发布时间】:2016-09-11 16:10:51
【问题描述】:
我知道以前在 Stack Overflow 上有人问过这个问题,但答案并没有以我可以解释的方式为我做。我的一般方法受到this 教程的启发。
我正在尝试做的是创建一个非常简单的模型,用于与用户建立好友关系,通过一条记录在两端创建等效的友谊。
在数据库级别,我只有一个“friendships”表,它只有一个 user_id、一个friend_id 和一个 is_pending 布尔列。
在 user.rb 中,我将关系定义为:
has_many :friendships
has_many :friends, through: :friendships
在friendship.rb中,我将关系定义为:
belongs_to :user
belongs_to :friend, :class_name => 'User'
如果我添加好友,我可以如下访问:
> a = User.first
> b = User.last
> Friendship.new(a.id, b.id)
> a.friends
=> #<User b>
这很完美,但我想要的是也能够像这样朝另一个方向发展:
> b.friends
不幸的是,按原样定义关系后,我得到了一个空集合。运行的 SQL 显示它正在搜索 user_id = b.id。如何指定它也应该搜索friend_id = b.id?
【问题讨论】:
-
你最终决定了什么?好奇的人想知道!
-
@MichaelGaskill 我想我将删除关系并在 user.rb 上定义一个 Friends 方法,该方法将运行一个简单的查询。我计划今晚结束这个功能,如果我没有改变主意,我会粘贴我的最终代码和一篇文章。
标签: ruby-on-rails ruby oop activerecord relationships