允许在轨道上的红宝石上发表评论

01

的07

允许注释

在户外在位置上博客

在之前的迭代中,添加RESTful身份验证,身份验证已添加到您的博客中,因此只有授权用户才能创建博客帖子。此迭代将添加博客教程的最后(和主要)功能:评论。在完成本教程后,用户可以在博客文章上发布匿名评论而无需登录。

02

of 07

支架注释

创建注释数据库表和控制器的过程与创建帖子数据库表和控制器的方式相同-使用scaffold生成器。脚手架生成器将创建RESTful控制器,映射路线并创建数据库迁移。但在您接受此操作之前,您必须考虑评论是什么以及其数据成员将是什么。评论有:

  • 姓名(必填字段):评论者的姓名为字符串。
  • 电子邮件(可选字段):评论者的电子邮件为字符串。
  • 正文(必填字段):评论正文为文本。
  • 帖子:这将评论与特定博客帖子相关联。这是具有多个属于关联所必需的。

一旦你've决定了什么评论's数据成员是,你可以运行脚手架生成器。请注意,帖子字段的类型为"references。&##34;这是一种特殊类型,它将生成一个ID字段,通过外键将注释表与帖子表链接起来。

$脚本/生成支架注释姓名:字符串电子邮件:字符串正文:文本发布:参考文献
存在应用程序/模型/
存在应用程序/控制器/
存在应用程序/助手/
。。。剪断。。。

一旦生成控制器和迁移,您就可以可以通过运行db:migrate rake任务继续运行迁移。

$rake db:migrate
==20080724173258 create comments:migrating====
-创建表(:注释)
->0.0255s
==20080724173258 CreateComments:已迁移(0.0305s)

03

of 07

设置模型

数据库表到位后,您可以开始设置模型。在模型中,诸如数据验证之类的事情-确保存在必填字段-并且可以定义关系。将使用两种关系。

博客文章有很多评论。hasëmany关系不需要't需要帖子表中的任何特殊字段,但注释表有一个帖子id将其链接到帖子表。从轨道上,你可以说110件事@发布获取属于@post对象的注释对象列表。注释在其父发布对象上也依赖于。如果帖子对象被销毁,则所有子注释对象也应销毁。

评论属于post对象。评论只能与单个博客文章相关联。属于关系只需要一个post_id字段位于注释表中。要访问评论'父发布对象,可以说@评论在轨道上。

以下是帖子和评论模型。已将多个验证添加到注释模型中,以确保用户填写必填字段。还要注意,这个关系属于关系。

#文件:应用程序/模型/后rb
class Post
有很多:评论,:依赖=>:销毁
结束
#文件:应用程序/模型/评论
class Comment
属于:post
验证_存在_of:name
验证_长度_of:name,:within=>2..20
验证_存在_of:body
end

04

of 07

准备注释控制器

注释控制器不会以使用RESTful控制器的传统方式使用。首先,它将仅从帖子视图访问。评论表单和显示完全在Post controller的显示操作中。因此,首先,删除整个app/view/comments目录以删除所有评论视图。他们赢得了'不需要。

接下来,您需要从注释控制器中删除一些操作。所有需要的's是createdestrow操作。所有其他操作都可以删除。由于注释控制器现在只是一个没有视图的短柱,因此您必须更改控制器中尝试重定向到注释控制器的几个位置。只要有重定向调用,请将其更改为重定向到(@评论)。以下是完整的注释控制器。

#文件:应用程序/控制器/注释_controler.rb
类评论控制器和lt;应用控制器
def create
@comment=评论(params[:comment])
如果@评论。保存
;flash[:note]='已成功创建注释。'
重定向到(@评论)
其他
闪光[:note]="错误创建评论:#{@评论。错误}"
(@评论)
end
end
def destruct
@comment=评论(params[:id])
@评论皮肤保养常识。销毁
(@评论)
end
end

05

of 07

注释表格

最后要实施的部分之一是评论表单,这实际上是一项相当简单的任务。基本上有两件事要做:在帖子控制器的显示操作中创建一个新的注释对象,并显示一个提交给Commen的创建操作的表单ts控制器。为此,请修改帖子控制器中的显示操作,如下所示。添加的行以粗体显示。

#文件:应用程序/控制器/帖子_controler.rb
#GET/posts/1
#GET/posts/1.xml
def show
@post=发现(参数[:id])
@评论=评论(:post=>@post)

显示注释表单与任何其他表单相同。将其放在帖子控制器中显示操作的视图底部。

06

of 07

显示注释

最后一步是实际显示评论。显示用户输入数据时必须小心,因为用户可能会尝试插入可能破坏页面的HTML标签。为防止这种情况,使用h方法。此方法将逃脱用户尝试输入的任何HTML标签。在进一步的迭代中,可以应用诸如红布或过滤方法的标记语言以允许用户发布某些HTML标签。

评论将显示为部分,就像帖子一样。创建一个名为233 app/views/posts的文件/_comment.html.erb并将以下文本放入其中。它将显示注释,如果用户登录并可以删除注释,还将显示销毁链接以销毁注释。


说:
:确认=>'你确定吗?',
:方法=>:如果登录则删除?%>

最后,要一次显示所有的帖子's注释,请使用调用注释部分:collection=>@发布。对于属于帖子的每个评论,这将称评论为部分评论。将以下行添加到帖子控制器中的显示视图中。

'评论',:集合=>@发布%>

一个是完成,一个功能齐全的评论系统被实现。

07

257 of 07 258

261>Next迭代

在下一个教程迭代中,简单的U格式将被称为红布的更复杂的格式引擎取代。RedCloth允许用户使用简单的标记创建内容,例如*粗体*,斜体为斜体。这将适用于博客海报和评论者。