允许在RubyonRails上发表评论

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

01

2007年

允许评论

Blogging outdoors on location

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

02

2007年

评论

创建comments数据库表和控制器的方法与创建posts数据库表和控制器的方法基本相同——使用scaffold生成器。脚手架生成器将创建RESTful控制器、映射路由和创建数据库迁移。但是在你开始之前,你必须考虑什么是评论,它的数据成员是什么。评论如下:

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

一旦确定了注释的数据成员是什么,就可以运行scaffold生成器。请注意,post字段的类型为“references”。这是一种特殊类型,它将生成一个ID字段,通过外键将comments表与posts表链接起来。

$ script/generate scaffold comment name:string email:string body:text post:references 存在应用程序/模型/ 存在应用程序/控制器/ 存在应用程序/帮助程序/ ... 剪

生成控制器和迁移后,可以继续运行db:migrate-rake任务来运行迁移。

$ rake db:migrate ==20080724173258 createcomments:迁移======== --创建表格(:注释) ->0.0255s ==20080724173258 createcomments:已迁移(0.0305s)

03

2007年

建立模型

一旦数据库表就位,就可以开始设置模型。在模型中,可以定义数据验证(确保存在必需的字段)和关系。将使用两个关系。

一篇博客文章有很多评论。has_-many关系不需要posts表中的任何特殊字段,但是comments表有一个post_id将其链接到posts表。在Rails中,您可以使用@post.comments之类的语句来获取属于@post对象的注释对象列表。注释也依赖于它们的父Post对象。如果Post对象被销毁,则所有子注释对象也应被销毁。

注释属于post对象。评论只能与单个博客文章关联。“属于”关系只要求注释表中有一个post\u id字段。要访问注释的父post对象,可以在Rails中说@comment.post之类的话。

以下是Post和Comment模型。注释模型中添加了一些验证,以确保用户填写所需字段。请注意,还有很多关系,属于关系。

# File: app/models/post.rb 类post<activerecord::base 有很多:注释,:依赖=>:销毁 终止 # File: app/models/comment.rb 类注释<activerecord::base 属于:职位 验证是否存在:name 验证:name,:within=>2..20的长度 验证是否存在:正文 终止

04

2007年

准备注释控制器

注释控制器将不会以传统的方式使用RESTful控制器。首先,它将仅从Post视图访问。注释表单和显示完全由Post控制器的show操作完成。因此,首先,删除整个app/views/comments目录以删除所有评论视图。不需要它们。

接下来,您需要从Comments控制器中删除一些操作。所需要的只是创建和销毁操作。可以删除所有其他操作。由于Comments控制器现在只是一个没有视图的存根,因此必须更改控制器中尝试重定向到Comments控制器的几个位置。只要有要调用的redirect_,就将其更改为redirect_to(@comment.post)。下面是控制器的完整注释。

# File: app/controllers/comments_controller.rb 类commentscontroller<applicationcontroller def创建 @comment=comment.new(参数[:comment]) [email protected] ;flash[:notice]=“注释已成功创建。” 将_重定向到(@comment.post) 其他的 flash[:notice]=“创建注释时出错:#{@comment.errors}” 将_重定向到(@comment.post) 终止 终止 def销毁 @comment=comment.find(参数[:id]) @毁灭 将_重定向到(@comment.post) 终止 终止

05

2007年

评论表

最后要完成的一项工作是评论表单,这实际上是一项相当简单的任务。基本上有两件事要做:在posts控制器的show操作中创建一个新的Comment对象,并显示一个提交给Comments控制器的create操作的表单。要执行此操作,请在posts控制器中修改show操作,如下所示。添加的行以粗体显示。

# File: app/controllers/posts_controller.rb #获取/posts/1 #get/posts/1.xml def秀 @post=post.find(参数[:id]) @comment=comment.new(:post=>@post)

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

06

2007年

显示注释

最后一步是实际显示注释。显示用户输入数据时必须小心,因为用户可能试图插入HTML标记,这可能会中断页面。为了防止这种情况,使用h方法。此方法将转义用户尝试输入的任何HTML标记。在进一步的迭代中,可以应用诸如RedCloth之类的标记语言或过滤方法来允许用户发布特定的HTML标记。

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

说: :confirm=>“你确定吗?”, :方法=>:如果已登录,则删除?%>

最后,要一次显示帖子的所有评论,请使用以下命令调用评论部分:collection=&gt@发表评论。这将为属于帖子的每个评论调用部分评论。将以下行添加到posts控制器中的“显示”视图中。

'comment',:collection=>@post.comments%>

完成这项工作后,将实现一个功能齐全的评论系统。

07

2007年

下一次迭代

在下一个教程迭代中,简单的_格式将被称为RedCloth的更复杂的格式化引擎所取代。RedCloth允许用户创建带有简单标记的内容,例如:粗体为*粗体,斜体为*斜体。这将提供给博客海报和评论。

  • 发表于 2021-10-04 18:29
  • 阅读 ( 147 )
  • 分类:IT

你可能感兴趣的文章

发现你最喜欢的网站的动力

...问的网站是由WordPress提供的,还是你正在使用的webapp是由rubyonrails提供的?有了googlechrome的这些扩展,你就再也不用怀疑了。 极客喜欢在引擎盖下挖掘,看看是什么让他们最喜欢的应用程序和网站滴答作响。但是今天打开“查看...

  • 发布于 2021-04-13 16:04
  • 阅读 ( 127 )

在ubuntudapper或edgy上安装ruby-on-rails

rubyonrails是一种流行的开发web应用程序的新框架。由于rubyonrails包含一个用于开发的内置web服务器,因此不需要安装单独的web服务器。 首先,您需要确保启用了universe存储库。 打开终端窗口,键入以下命令: sudo apt-get install ruby ...

  • 发布于 2021-04-14 15:26
  • 阅读 ( 119 )

tumblr正在回复

... 作者也可以选择谁可以评论他们的文章。他们可以允许平台上的每个人,或者只允许他们关注的Tumblrs发表评论。作者还可以向他们关注的Tumblrs打开回复功能,Tumblrs至少会跟踪他们一周。未跟随的读者可以自动阻止他们在...

  • 发布于 2021-05-04 00:54
  • 阅读 ( 188 )

反网络中立的垃圾邮件发送者正在冒充真人大量发表fcc评论

...周前,网上也出现了不同版本的反网络中立评论,但未经允许使用真实身份的事实是一个奇怪的转折。FCC拒绝就是否知道这些评论或过去是否处理过类似问题发表评论。 目前尚不清楚是谁策划了这些评论。评论中使用的一句...

  • 发布于 2021-05-11 03:43
  • 阅读 ( 219 )

iPhone11和iPhone11Pro到底有多快?

...one11pro每分钟处理150次,而三星Galaxy S10+只运行了60.39次。RubyonRails的创建者DavidHeinemeierHanson在Twitter上发布了Javascript速度测试结果,结果显示iPhone11击败了许多**和台式机。也就是说,尽管如此,一些测试表明A13是可以打败的。包...

  • 发布于 2021-05-13 12:32
  • 阅读 ( 139 )

我是戴维·海涅迈尔·汉森,大本营首席技术官,我就是这样工作的

...Hansson,又名DHH,是Basecamp同名旗舰产品的开发者。他还是rubyonrails的创建者,rubyonrails是Hulu、Airbnb、GitHub和Twitter早期版本等网站的基础框架。在业余时间,他是一名国际赛车手。我们问他工作怎么样。地点:现在,加利福尼亚州...

  • 发布于 2021-05-15 12:05
  • 阅读 ( 147 )

如何选择谁可以在instagram上发表评论

...消除这种虐待,Instagram(谢天谢地)添加了一个新功能,允许您自定义允许谁对图片进行评论。为了限制谁可以对你的图片发表评论,你需要进入Instagram应用程序的“选项”菜单,然后向下滚动到“设置”。在设置菜单中,您将...

  • 发布于 2021-05-15 15:30
  • 阅读 ( 110 )

通过29个优秀的在线课程和工具,学习ruby

...态web应用程序(Hulu、GitHub和Basecamp,举个例子)都是使用RubyonRails框架构建的。如果您想深入RubyonRails,下面是一些最好的在线课程、工具和其他资源,供您书签。正如他们在学习网页设计时所做的那样,我们在SkilledUp的朋友们...

  • 发布于 2021-05-20 17:20
  • 阅读 ( 137 )

页(pages)和帖子(posts)的区别

...共关系而创建的。 WordPress是2003年发布的一个发布平台,允许用户创建博客。它是一个PHP和MySQL支持的博客工具,允许用户利用模板处理器重新排列小部件和切换主题。它是搜索引擎友好和支持标签的文章和文章。 在构建WordPress...

  • 发布于 2021-06-23 19:12
  • 阅读 ( 160 )

python(python)和红宝石(ruby)的区别

...种脚本语言。Python在过去几年中获得了巨大的发展,自从rubyonrails出现以来,Ruby也得到了很多关注。下面是两种流行脚本语言之间的一个简短的对比。   什么是python(python)? Python在20世纪80年代末作为Guido van Rossum的宠物项目开...

  • 发布于 2021-06-25 22:26
  • 阅读 ( 251 )
mtun5341
mtun5341

0 篇文章

相关推荐