项目需求
公司内部的简易邮件系统——站内信,基本的增删改查,一对一发送,群发,信息查看状态、
数据库设计
站内信的 “群发” 可覆盖 “一对一发送” ,如下定义
letter_text has_many :letters
letter(站内信)
字段 | 数据类型 | 默认值 | 备注 |
---|---|---|---|
id | integer | ||
send_id | integer | 发送者(user) | |
rec_id | integer | 接受者(user) | |
text_see | string | 未查看 | 查看状态 |
letter_text_id | integer | 外键(letter_text) |
letter_text(消息内容)
字段 | 数据类型 | 默认值 | 备注 |
---|---|---|---|
id | integer | ||
title | string | 标题 | |
text | text | (不为空) | 聊天内容 |
send_time | time | 发送时间 | 发送时间 |
站内信项目的增删改查
基础建设
ruby -v
#=> ruby 2.3.1
rails -v
#=> rails 5.1.4
rails new letter
cd letter
git init
git add .
git commit -m "first commit"
git checkout -b ch01
省略前端套用、 User 表等基础建设
Routes
config/routes.rb
Rails.application.routes.draw do
root 'letters#index'
resources :users
resources :letters
resources :letter_texts
end
Model
文件 app/models/letter.rb 代码如下
class Letter < ApplicationRecord
belongs_to :letter_text
belongs_to :sender, class_name: "User", foreign_key: "send_id"
belongs_to :recer, class_name: "User", foreign_key: "rec_id"
end
文件 app/models/letter_text.rb 代码如下
class LetterText < ApplicationRecord
has_many :letters
end
Controller
文件 app/controllers/letters_controller.rb 代码如下
class LettersController < ApplicationController
def index
@letters = Letter.all
end
def show
@letter = Letter.find(params[:id])
end
def destroy
@letter = Letter.find(params[:id])
@letter.destroy
redirect_to letters_path
end
end