我正在尝试在我的 Rails 应用程序中构建用户之间的“交友”功能。 当用户发出好友请求时,将创建一个新的“好友”项目:
@friend = Friend.create(:user_id => session[:user_id], :friend_id => params[:friend_id], :status => "pending")
然后其他用户 (:friend_id) 可以接受或拒绝该请求。接受时,状态更改为“已接受”,一切正常。
我现在正在尝试返回 friend 列表,但我遇到的问题是 Friend 项目可以将 friend ID 保存在 :user_id 或 :friend_id 中,具体取决于发起请求的人。
我正在返回所有在 :user_id 或 :friend_id 中具有登录用户 ID 的 friend 项目,但我无法将它们分类到 1 个用户列表中,这些用户不是当前登录的用户(即 friend 用户)登录用户的)一旦我有了那些 friend 项目。这就是我目前所做的,希望它能让您了解我正在尝试做的事情。
@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
我希望这是有道理的,在此先感谢
最佳答案
我已经在一小部分数据上试过了,它运行良好,应该可以运行!
cuid = session[:user_id]
query = %Q{SELECT DISTINCT users.*
FROM users,friends
WHERE (friends.user_id = #{cuid} OR friends.friend_id = #{cuid})
AND (friends.user_id = users.id OR friends.friend_id = users.id)
AND (friends.status = 'accepted')
AND (users.id != #{cuid})
}
@friends = User.find_by_sql(query)
关于mysql - 根据 :user_id and then merge into 1 对 2 个 ActiveRecord 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076554/