1

私は新しいRails開発者で、フレンドとサブスクリプションの両方のシステムを持つユーザーとフレンドの関係(Facebookスタイル)をモデル化しようとしています。私はいくつかのブログや本でそれについて読んだことがありますが、非常に適切な実装を見つけることができなかったと感じています.

  1. 各関係に対応するデータベース内のエントリは 1 つだけにする必要があるため、フィールド (user_id、friend_id、status、type) を使用して関係テーブルをモデル化しました。ここで、type ={friend、subscriber} および status = {accepted, hold }

  2. send_request、accept_request、cancel_request、unfriend、delete_request、subscribe、unsubscribe などのすべての機能を実装したいと考えています。

  3. 次に、すべての関数が抽象化規則に従うようにします。send_request と同様に、current_user.send_request(@user) のように機能し、send_request(@user, @friend) のようには機能せず、そこにすべての SQL を書き込む必要があります。

  4. このような実装により、関係を「家族」「親友」などのより多くのタイプに拡張するのに役立つと思います。

私はよく調べましたが、Facebook スタイルの友情モデルの適切な実装を見つけることができませんでした。助けが得られるリソースや、可能であればコードを手伝ってくれるリソースを教えてください。コーディングを開始した方法でユーザーモデルのコードを投稿していますが、より良い解決策があると感じています。いくつかの洞察を通してください。この質問が的外れで主観的ではないことは承知しています。管理者: Stackoverflow のルールに違反していることをお許しください。

class User < ActiveRecord::Base
 devise :database_authenticatable, :registerable, :recoverable, :rememberable,    :trackable, :validatable

 has_one :profile, :dependent => :destroy

 has_many :relationships, :foreign_key => :user_id, :dependent => :destroy
 has_many :reverse_relationships, :foreign_key => "friend_id",  :class_name =>    "Relationship", :dependent => :destroy

 has_many :direct_friends, :through => :relationships, :conditions => "status =    'accepted'", :source => :friend
 has_many :reverse_friends, :through => :reverse_relationships, :conditions => "status = 'accepted'", :source => :user

 has_many :requested_friends, :through => :reverse_relationships,
:source => :friend, :conditions => "status = 'hold'", :order => :created_at
 has_many :pending_friends, :through => :relationships, 
:source => :user, :conditions => "status = 'hold'", :order => :created_at

  attr_accessible :email, :password, :password_confirmation, :remember_me

 def friends
   direct_friends | reverse_friends
 end

.
.
.

4

0 に答える 0