我研究RoR并做像facebook这样的应用程序。 1个用户向2个用户发送请求以获取友谊。第二个用户确认他们将成为朋友的友谊
我有: 表:
1. users
:id
:email
(has_many :friendships, foreign_key: 'requester_id', dependent: :destroy
has_many :requesters, through: :friendships, source: :requester
has_many :responders, through: :friendships, source: :responder)
2. friendships
:id
:requester_id
:responder_id
(belongs_to :requester, class_name: "User"
belongs_to :responder, class_name: "User"
has_one :confirm_friendship)
3. confirm_friendships
:friendship_id
:confirm
(belongs_to :friendship)
That users have friendship i do:
u1 = User.first
u2 = User.second
u1.friendships.create!(responder_id: other_user.id)
fr = Friendship.find_by(requester_id: u1.id, responder_id: u2.id)
conf = ConfirmFriendship.create(friendship_id: fr.id, confirm: true)
抱歉我的英文。非常感谢您的帮助。
答案 0 :(得分:0)
看看一些基于Rails的开源社交网络'在Github上。这是Diaspora User
模型的链接(https://github.com/diaspora/diaspora/blob/develop/app/models/user.rb),为学习提供了一个很好的例子。
如果您正在寻找最简单的实现,我会说您可以尝试以下方法,您可以取消confirm_friendships
模型并在friendships表上放置一个confirmed?
布尔列。
将friendships.confirmed?
设置为默认值为false,只有响应者接受后才会将其设置为true
。
然后,您可以使用以下范围过滤user.friendships
:
scope :confirmed, -> { where("friendships.confirmed? = ?", true) }
分离哪些朋友处于确认状态,哪些朋友不处于确认状态。
也许你可以用这些方面的东西简化模型?
User
has_many: friendships
Friendships
belongs_to :requester, class_name: "User"
belongs_to :responder, class_name: "User"
它可能过于简化,但我希望这个答案中的某些内容对您有用。