【发布时间】:2013-12-03 07:13:53
【问题描述】:
我正在尝试在我的 Rails 应用程序中建立用户之间的“交友”功能。 当用户发出好友请求时,会创建一个新的“好友”项:
@friend = Friend.create(:user_id => session[:user_id], :friend_id => params[:friend_id], :status => "pending")
然后其他用户 (:friend_id) 可以接受或拒绝该请求。接受时,状态更改为“已接受”,一切正常。
我现在正在尝试返回朋友列表,但我遇到的问题是 Friend 项目可以在 :user_id 或 :friend_id 中保存朋友 ID,具体取决于发起请求的人。
我将返回所有在 :user_id 或 :friend_id 中具有登录用户 ID 的 Friend 项目,但我无法将它们分类为 1 个非当前登录用户的用户列表(即朋友用户)登录用户的)一旦我有了这些朋友项目。这就是我目前所拥有的,希望它能让您了解我正在尝试做的事情。
@stalked = Friend.where(:user_id => session[:user_id], :status => "accepted")
# @stalked_friends = Users where id == :friend_id in @stalked list
@stalkers = Friend.where(:friend_id => session[:user_id], :status => "accepted")
# @stalker_friends = Users where id == :user_id in @stalkers list
@friends = @stalked_friends + @stalker_friends
我希望这是有道理的,并在此先感谢
【问题讨论】:
-
您希望最终的
friends是User或Friend对象的数组吗?也请查看我的答案。 -
如果您改为为每个友谊创建两条记录,一条在“每个方向”,那么这将是一个简单的问题,即“用户通过 UserFriends 拥有多个朋友”关联。
-
@DavidAldridge 我想知道这是否会更好,但我对此很陌生,并认为创建两条记录会被归类为重复自己?不过感谢您的提示-肯定会更容易
标签: mysql ruby-on-rails activerecord merge