这里我们将增强我们的
Ruby
web log
,以使读者能够添加评论。在这个过程中,我们将了解如何处理
Rails
中的模型关系,因为单个帖子可能没有评论,也可能有多个评论。
准备工作
我打算从以前的帖子 Rails and Database Migrations 结束的地方开始。另外,您可以在 BlogDemo.zip 的基础上开始本文的操作,此压缩文件包含了那个帖子中完成的项目。
测试 BlogDemo 项目
- 打开 BlogDemo 项目。
- 运行项目并浏览 http://localhost:3000/blog 以验证其是否正常运行。
创建评论模型
1. 切换回 Projects 选项卡,右键单击 Models 文件夹并生成一个名为 Comment 的新模型。
- 打开 003_create_comments.rb 并将 post_id, created_at 和 comment 列添加到上面,方法如下:
- 右键单击 BlogDemo 项目并选择 Migrate Database > To Current Version
定义模型关系
- 将 has_many 关联关系添加到 post.rb:
- 将 belongs_to 关联关系添加到 comment.rb:
重新生成我们的控制器框架(scaffolding)
在我们第一次创建此项目和生成 Post 模型的框架时,我们没有选择覆盖现有的博客控制器,所以没有创建框架操作。这样,我们可以自定义框架操作,我们将删除 blog_controller.rb 并再次生成框架。注意:不要使用覆盖选项,因为已经自定义了视图,而且不希望放弃这些自定义:
1. 删除 blog_controller.rb
- 生成 Scaffold(框架)。将 Model Name 设置为 Post,Controller Name 设置为 Blog。
- 打开最新创建的 blog_controller.rb,它现在拥有所有框架操作(索引、列表、显示、新建、创建、编辑、更新和破坏)。
新建发表评论操作
我们将要修改显示视图,以使其包括可以添加评论的文本区。首先,我们将为发表评论新建一个操作。
- 修改显示操作,以便将帖子 id 保存到 flash:
- 创建下一个 post_comment 操作:
修改要发表评论的视图
- 打开 show.rhtml 并在底部添加下列内容:
测试
- 在浏览器中,单击 Permalinks 之一,查看一个条目的详细资料。测试添加评论:
显示评论
我们的博客还未显示我们所添加的评论,现在我们来修复此问题。
- 将 post_comments 实例变量添加到显示操作,以收集评论:
- 将下列内容添加到 show.rhtml 以显示评论。<hr> 和 <h4>Comments</h4> 已经存在,其放置的位置可供参考:
测试
- 添加另一个评论: