ruby on rails-活动记录,其中外键可以是两列中的任意一列



我有一个用户模型。

我有一个Friend Model,列为invitee_id、Invite_id和status。状态被用作朋友请求是否已被接受的标志。Inviter_id是发送好友请求的用户的id,invitee_id是接收好友请求的使用者。请检查内联注释。

class User < ActiveRecord::Base
    has_many :friends // now i want to search all the friends with accepted friend request. (sent or received both.)
    has_many :pending_friend_requests,:class_name => "Friend", :foreign_key=>"invitee_id", :conditions => {:status => 0}
end
class Friend < ActiveRecord::Base
end

问题是如何找到所有接受好友请求的好友。。发送或接收,因为存在两个外部列。invitee_id或Invite_id

如果我答对了你的问题,这个屏幕广播就是你需要的。

更新

尽管你说你没有,但我认为,你确实需要一种自我参照的多对多关系。您可以创建一个命名作用域,而不是为挂起的请求创建关联。之后,你可以得到User.find(params[:id]).friends.accepted邀请的所有朋友。

我不明白的是,你是想让user.friends同时检索邀请我的人和我邀请的人,还是只检索其中一个。

由于你的名字(邀请人和被邀请人),我想这是第二种情况。它在放映中被覆盖了。这是通过创建额外的反向关联来完成的(Ryan最后谈到了这一点)。

但如果是第一个,最简单的解决方案是为每个邀请方-受邀方对排两行。你可以用这个宝石来简化事情,但它的作用和我说的一样。

如果没有帮助,试着具体说明你的问题。

has_many设置关系。条件使用scope

class User < ActiveRecord::Base
    has_many :invitees, :through => :friends
    has_many :friends, :foreign_key=>"inviter_id"
    def accepted_invitees
       invitees.where(:friends => {:accepted => true })
    end
end
class Friend < ActiveRecord::Base
    belongs_to :invitee, :class_name => "User"
    belongs_to :inviter, :class_name => "User"
    # needs accepted column
end

然而,由于模型和列的设置方式,这会让人感到困惑。如果我这样做,我会做一些类似的事情:

class User < ActiveRecord::Base
    has_many :friends, :through => :friendships
    has_many :friendships
    def accepted_friends
        friends.where(:friendships => {:accepted => true })
    end
end
class Friendships < ActiveRecord::Base
    belongs_to :user # change inviter_id to user_id
    belongs_to :friend, :class_name => "User" # change invitee_id to friend_id
    # needs accepted column
end

相关内容

  • 没有找到相关文章