私は新しいRails開発者で、フレンドとサブスクリプションの両方のシステムを持つユーザーとフレンドの関係(Facebookスタイル)をモデル化しようとしています。私はいくつかのブログや本でそれについて読んだことがありますが、非常に適切な実装を見つけることができなかったと感じています.
各関係に対応するデータベース内のエントリは 1 つだけにする必要があるため、フィールド (user_id、friend_id、status、type) を使用して関係テーブルをモデル化しました。ここで、type ={friend、subscriber} および status = {accepted, hold }
send_request、accept_request、cancel_request、unfriend、delete_request、subscribe、unsubscribe などのすべての機能を実装したいと考えています。
次に、すべての関数が抽象化規則に従うようにします。send_request と同様に、current_user.send_request(@user) のように機能し、send_request(@user, @friend) のようには機能せず、そこにすべての SQL を書き込む必要があります。
このような実装により、関係を「家族」「親友」などのより多くのタイプに拡張するのに役立つと思います。
私はよく調べましたが、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
.
.
.