【Ruby on Rails全栈课程】4.2 评论功能实现(一)--数据表的创建

1、详情页面功能描述

(1)点击帖子标题/帖子内容,进入帖子详情页面,评论框在详情页面最下面。
(2)点击详情页面的评论按钮,页面定位到评论框。(通过锚点定位)
(3)点击每个评论下面的回复按钮,在该评论下面出现回复评论框,回复变成取消回复,点击取消回复,收起评论框。用js控制。
(4)如果评论被删除,评论内容展示为「该评论已删除」,该评论回复按钮隐藏,该评论下面的回复可以正常显示和回复
(5)每个评论回复的条数最多显示两条,多于两条,回复下面会显示「点击查看更多回复」

2、创建comments表,来保存评论,表结构如下:

字段名 字段说明 字段类型 备注
account_id 用户id integer 必填
post_id 帖子id integer 必填
status 评论状态 integer 0代表正常,1代表自己删除,2代表管理员删除
content 评论内容 text 评论限制200字
as_type 评论类型 integer 0代表帖子的评论,1代表评论的回复
re_comment_id 回复评论的id integer 当as_type为1时,此项为此回复所属帖子评论(as_type为0)的id。
re_reply_id 被回复评论的id integer 当回复as_type为1的评论时,此项为这条as_type为1的评论的id

字段解析:

  • re_comment_id字段
    设计这个字段是为了获取某个评论(as_type为0的评论)下面的所有回复
  • re_reply_id字段
    设计这个字段是为了找到被回复的as_type为1的评论id,我们通过这个被回复的评论id,找到该条评论,从而找到对应的客户,显示在页面上

3、执行命令创建comments表

#产生映射文件
/vagrant/data_symtem$ rails g model comment account_id:integer post_id:integer status:integer content:text as_type:integer re_post_id:integer re_account_id:integer
#系统返回信息
   create    db/migrate/20181127085433_create_comments.rb
   create    app/models/comment.rb
   invoke    test_unit
   create      test/models/comment_test.rb
   create      test/fixtures/comments.yml
#将映射文件映射到数据库中
/vagrant/data_symtem$ rake db:migrate
#系统返回信息
== 20181127085433 CreateComments: migrating ===================================
-- create_table(:comments)
  -> 0.0150s
== 20181127085433 CreateComments: migrated (0.0164s) ==========================

4、修改字段名称:

(1)运行完rake db:migrate之后,突然发现有两个字段名输入错误,re_post_id、re_account_id,分别应为re_comment_id,re_reply_id。这时,需要先在终端运行rails g migration RenameRePostIdForComment

RenameRePostIdForComment这个名称不是固定的,ChangeRePostIdForComment和RenameRePostIdToComment都是可以的,但是要保证名称的唯一,并且能通过名称判断你改了哪个表的哪个字段。

#产生映射文件
/vagrant/data_system$ rails g migration RenameRePostIdForComment
#系统返回信息
Running via Spring preloader in process 4235
invoke  active_record
create    db/migrate/20181128074435_rename_re_post_id_for_comment.rb
(2)上面的操作产生了映射文件,db/migrate/20181128074435_rename_re_post_id_for_comment.rb,打开sublime代码编辑器,在db/migrate文件夹下找到这个文件,粘贴下面代码,保存文件
def change
  rename_column :comments, :re_post_id, :re_comment_id
  rename_column :comments, :re_account_id, :re_reply_id
end
(3)我们运行rake db:migrate迁移一下修改后的映射文件,将映射文件映射到数据库中。
/vagrant/data_system$ rake db:migrate
#系统返回信息
== 20181128074435 RenameRePostIdForComment: migrating =========================
-- rename_column(:comments, :re_post_id, :re_comment_id)
   -> 0.0270s
-- rename_column(:comments, :re_account_id, :re_reply_id)
   -> 0.0271s
== 20181128074435 RenameRePostIdForComment: migrated (0.0572s) ================

这样re_post_id、re_account_id字段名字,分别被修改为re_comment_id,re_reply_id

(4)扩展

A、如果某个字段的类型不小心填错了,比如comments表中的post_id字段的integer类型写成了string类型。首先在命令行运行rails g migration ChangePostIdForComment,产生映射文件后,在映射文件中添加下面代码:

change_column :comments, :post_id, :string, default: "0"

B、如果某个字段本不需要添加,需要删除这个字段,比如comments表中需要删除掉as_type字段。首先在命令行运行rails g migration DeleteAsTypeForComment,产生映射文件后,在映射文件中添加下面代码:

remove_column :comments, :as_type

猜你喜欢

转载自blog.csdn.net/weixin_34203426/article/details/87027229
今日推荐