📅  最后修改于: 2023-12-03 15:34:36.830000             🧑  作者: Mango
在社交网络应用中,好友请求系统是一项必不可少的功能。本文将介绍如何在 Rails 中实现好友请求功能。
假设我们已经有了一个社交网络应用,每个用户都有一个唯一的 ID 和一个名字。我们需要为用户实现好友请求功能,用户可发送和接收好友请求。
当一个用户 A 发送好友请求给另一个用户 B 时,我们需要记录这个请求,并在 B 接受或拒绝请求时更新相关记录。下面是好友请求的一般流程:
我们需要创建一个新的模型来处理好友请求。表格包括:请求发送者 ID,接收者 ID 和请求状态(等待、接受或拒绝)。可以使用下面的命令来生成模型和数据库迁移:
rails generate model FriendRequest sender_id:integer receiver_id:integer status:integer
rails db:migrate
```ruby
rails generate model FriendRequest sender_id:integer receiver_id:integer status:integer
rails db:migrate
### 控制器
我们需要一个控制器来处理发送和接受请求并更新请求状态。这里我们使用了一个名为 FriendRequestsController 的控制器。
```ruby
class FriendRequestsController < ApplicationController
def create
request = FriendRequest.create(sender_id: current_user.id, receiver_id: params[:receiver_id], status: 0)
redirect_to root_path, notice: "请求已发送。"
end
def update
request = FriendRequest.find(params[:id])
if params[:status] == '1' # 接受请求
Friend.create(user_id: request.sender_id, friend_id: request.receiver_id)
Friend.create(user_id: request.receiver_id, friend_id: request.sender_id)
request.update(status: 1)
redirect_to root_path, notice: "请求已接受。"
elsif params[:status] == '0' # 拒绝请求
request.update(status: 2)
redirect_to root_path, notice: "请求已拒绝。"
end
end
end
```ruby
class FriendRequestsController < ApplicationController
def create
request = FriendRequest.create(sender_id: current_user.id, receiver_id: params[:receiver_id], status: 0)
redirect_to root_path, notice: "请求已发送。"
end
def update
request = FriendRequest.find(params[:id])
if params[:status] == '1' # 接受请求
Friend.create(user_id: request.sender_id, friend_id: request.receiver_id)
Friend.create(user_id: request.receiver_id, friend_id: request.sender_id)
request.update(status: 1)
redirect_to root_path, notice: "请求已接受。"
elsif params[:status] == '0' # 拒绝请求
request.update(status: 2)
redirect_to root_path, notice: "请求已拒绝。"
end
end
end
### 路由
我们需要将控制器动作添加到路由中。
```ruby
Rails.application.routes.draw do
resources :friend_requests, only: [:create, :update]
end
```ruby
Rails.application.routes.draw do
resources :friend_requests, only: [:create, :update]
end
### 视图
我们需要在视图中添加按钮来发送和接受好友请求。
```html
<%= link_to '添加好友', friend_requests_path(receiver_id: user.id), method: :post %>
<%= link_to '接受', friend_request_path(request, status: 1), method: :patch %>
<%= link_to '拒绝', friend_request_path(request, status: 0), method: :patch %>
```html
<%= link_to '添加好友', friend_requests_path(receiver_id: user.id), method: :post %>
<%= link_to '接受', friend_request_path(request, status: 1), method: :patch %>
<%= link_to '拒绝', friend_request_path(request, status: 0), method: :patch %>
## 结论
在本文中,我们介绍了如何在 Rails 中实现好友请求功能。使用模型、控制器、路由和视图来处理好友请求。希望可以帮助您实现您的社交网络应用中的好友请求功能。