【Ruby on Rails实战】4.2 评论功能实现(一)--
2019-01-13 本文已影响1人
808cb3be8e58
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