ユーザーが別のユーザーの友情を持つユーザーモデルがあります。フレンドシップ モデルは、ユーザーの class_name を持つフレンドを使用します。すべてが正常に機能しているようです。ただし、機能にパッチを当てようとしているだけで、最善の手順に従っていないと思います。
私のコントローラー、友情コントローラーには、 current_user が友達を追加できる場所があります。ただし、同じ友達を 2 回追加することは望ましくありません。
user = current_user.id
friend = params[:friend_id]
temp_friendship = Friendship.where('(user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?)', user,friend,friend,user)
if !temp_friendship.present?
@friendship = current_user.friendships.build(:friend_id => params[:friend_id])
if @friendship.save
redirect_to current_user, :notice => "Added friend."
else
redirect_to current_user, :alert => "Unable to add friend."
end
else
redirect_to current_user, :alert => "Already a friend."
end
このコードはすべてうまく機能します。ただし、データベースに不要な呼び出しを行っているようです。モデルによる検証など、このコントローラー呼び出しを最適化する方法はありますか?
これを試してみましたが、既に友達を開始した場合にのみ検証エラーが返されます。誰かが私を友達として追加した場合 (ここで、friend_id は私のユーザー ID になります)、エラーは発生しません。
validates_uniqueness_of :user_id, :scope => :friend_id
validates_uniqueness_of :friend_id, :scope => :user_id