📜  rails 好友请求 - Ruby (1)

📅  最后修改于: 2023-12-03 15:34:36.830000             🧑  作者: Mango

Rails 好友请求

在社交网络应用中,好友请求系统是一项必不可少的功能。本文将介绍如何在 Rails 中实现好友请求功能。

现有系统

假设我们已经有了一个社交网络应用,每个用户都有一个唯一的 ID 和一个名字。我们需要为用户实现好友请求功能,用户可发送和接收好友请求。

好友请求流程

当一个用户 A 发送好友请求给另一个用户 B 时,我们需要记录这个请求,并在 B 接受或拒绝请求时更新相关记录。下面是好友请求的一般流程:

  1. 用户 A 点击添加好友按钮,将好友请求发送给 B。
  2. 请求被保存到数据库中,等待用户 B 做出反应。
  3. 用户 B 收到请求通知,可以选择接受或拒绝。
  4. 如果 B 接受请求,则在数据库中创建一项新的好友关系记录,并通知用户 A。
  5. 如果 B 拒绝请求,则删除数据库中的请求记录,并通知用户 A。
实现好友请求
模型

我们需要创建一个新的模型来处理好友请求。表格包括:请求发送者 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 中实现好友请求功能。使用模型、控制器、路由和视图来处理好友请求。希望可以帮助您实现您的社交网络应用中的好友请求功能。