簡體   English   中英

Ruby on Rails活動記錄協會,我該怎么做確認友誼(例如在Facebook上)

[英]Ruby on Rails Active Record Associations, how i can do confirmation friendship(like on facebook)

我學習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)

對不起我的英語不好。 非常感謝你的幫助。

看看Github上許多基於Rails的開源“社交網絡”。 這是指向Diaspora的User模型的鏈接( https://github.com/diaspora/diaspora/blob/develop/app/models/user.rb ),它提供了一個很好的研究示例。

如果您正在尋找最簡單的實現方式,我會說您可以嘗試以下操作,在其中可以取消confirm_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"

可能過於簡化了,但我希望此答案對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM