Rails + Bootstrap个人博客搭建的完整过程(4)
2019独角兽企业重金招聘Python工程师标准>>>
Part 10
接上文,接下来需要做的工作就是网站的安全性。
-字段的有效性设置。这里主要是validates关键字的使用。
如果在目前的网站中,新建文章时,如果不输入文件的标题和内容,却依然可以插入一条数据到数据库,这显然是不对的。根据我目前的要求,文章的标题和内容都是不允许为空的,所以需要在article.rb中加入一行:
validates :title, :content, presence: true
这样如果这2个字段没有被赋过值,这篇文章是不会被插入的。但是发现,在此时插入失败,浏览器没有给出任何提示就直接回到了文章列表页面,给人发布成功的错觉,所以接下来添加一些提示。
1.如果插入失败,依然留在创建页面,即new.html.erb页面。修改articles_controller中的create方法为:
def create@article = Article.new(article_params)if @article.saveredirect_to articles_url elseredirect_to new_article_urlend
end
2.在new.html.erb页面给出插入失败的提示:
准备开工时发现这个页面里面多了一行
<%= render "./welcome/comment" %>
觉得奇怪,这是新建article,怎么可能会出现comment呢,这应该是我们之前遗留的忘了删掉了,只应该在show和edit中有才对,好的,删除它。
当我们需要知道插入数据的错误时,我们一定需要知道是哪个对象的数据插入错误,即传入到new.html.erb页面的article实例对象,而且必须是插入失败了,不再跳转到别的页面,直接停留在当前页面,但是需要刷新出错误列表以便用户知道该怎么避免输入的错误。所以,在articles_controller中的create方法中的else部分,当插入失败就会执行这里,但是如果只是redirect_to的话,当前的@article对象数据会丢失,必须使用render方法,重新渲染这个页面,所以,它应该改为:
def create@article = Article.new(article_params)if @article.saveredirect_to articles_url else# redirect_to new_article_urlrender 'new'end
end
然后在new.html.erb页面中,如果确实是有错误出现(当然很多时候也没有错误),那么久需要显示错误,暂时就定在在表单的上面显示,显示数据错误的代码:
<div class="form_error"><% if @article.errors.any? %><% @article.errors.full_messages.each do |message| %><li><font color=red><%= message %></font></li><% end %><% end %>
</div>
这个div里面的form_error样式如下:
.form_error {color: red;
}
只是定义了一下颜色为红色,这样更醒目一些。但是显示的错误信息是Rails给出的,而且是英文,这对于不同国家的用户来说可能不太和谐,所以我们需要定制显示的错误信息。
刚查了下,貌似要定制错误消息,尤其是要把错误里面的字段名改变好像有点麻烦,所以这个问题就留在后面做吧。
-字段的长度限制。在当前的blog项目中,显然一篇文章的标题不能无限长,暂时我就把它限制在50字之内
有了前面的基础,只需在article.rb中添加一行:
validates :title, length: { maximum: 50, message: "长度不能超过50个字符" }
即可。
Part 11
首先说明测试是很重要的,但是我个人不习惯TDD/BDD,所以我并没有遵循大部分教科书的建议。
在Rails领域进行相关测试,主要的方式有2种,一是rails自带的测试框架,二是主流的框架RSpec。
-自带的测试的框架(Reference:http://guides.ruby-china.org/testing.html),先介绍为模型编写单元测试
命令介绍:
使用格式:
rake test test/models/modelname_test.rb
其实就是rake test test_file_path
1.对article模型进行相应的简单单元测试
在test/article_test.rb里面添加一个测试方法,测试article中title字段的存在性,相应的测试代码如下:
test "Should not save article with title" do article = Article.newassert_not article.save#, "can add some message help you find the test"
end
对于title没有赋值的article对象,断言它是会保存失败的。如果断言返回值是真,说明title字段是有存在性验证的,如果返回为假,说明title字段没有存在性验证,而根据我们的设想,每个article对象的title必须要存在,所以title的字段的存在性验证是一定要的,所以我们必须保证上述的测试要通过。
经过实验,发现测试的名称和断言错误消息可以使用中文,对于article的content字段的存在性测试如下:
test "article对象的content字段必须存在" do article = Article.newarticle.title = "测试标题"assert_not article.save, "article对象要保存必须添加content"
end
如果测试失败(当然目前测试是正确的),那么测试的结果将会输出类似的信息:
Run options: --seed 25449# Running:.FFinished in 0.042496s, 47.0633 runs/s, 47.0633 assertions/s.1) Failure:
ArticleTest#test_article对象的content字段必须存在 [/Users/blues/Documents/ror/blog/test/models/article_test.rb:13]:
article对象要保存必须添加content2 runs, 2 assertions, 1 failures, 0 errors, 0 skips
2.comment模型的测试编写
作为一个与article有对应关系的model,comment的测试理所当然的需要与article产生关系,测试代码如下:
test "Should not save comment without content" do article = Article.newarticle.title = "test article title"article.content = "test article content"article.savecomment = article.comments.build(content: "test comment content")assert comment.saveend
如果把comment对象仅仅像article一样初始化:
comment = Comment.new
我们断言它一定会失败,但是我运行测试发现:居然断言失败,说明comment的content字段为空时也可以保存成功,这是与我们的想法相悖的,所以我们对于comment对象的验证出了问题,检查代码发现,我根本没有对comment的任何字段做存在性检测,那么就加上吧:
validates :content, presence: true
然后再次运行测试:
rake test test/models/comment_test.rb
通过!
那么看起来一个测试的通过与否是取决于我们的断言(assert)是否正确,这是我们保证我们的代码与我们想要的效果是一致的有效手段,那么出了断言真假外,我们还需要断言一个数据是否是等我们期望的值,字符串是否与我们的期望完全匹配的很多不同种类的断言,为此Rails提供的断言也是多种多样的,具体可以参见:
http://guides.ruby-china.org/testing.html
中的
3.4 可用的断言
3.为控制器编写功能测试
http://guides.ruby-china.org/testing.html的4.1节我还没成功,待续...
接下来的工作就是网站的安全性部分,包括防意外脏数据的插入,字段不为空的检测,格式要求,和最主要的测试部分
转载于:https://my.oschina.net/u/913344/blog/369384
Rails + Bootstrap个人博客搭建的完整过程(4)相关推荐
- Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件
Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...
- 如何在云服务器上搭建一个自己的博客系统(完整流程梳理)
文章目录 前言 一.项目下载 1.下载地址: 1.下载及导入本地. 二.搭建前的准备工作. 1.Mysql建库,执行数据库建表,生成数据脚本 2.将博客项目打成jar包. 3.创建项目目录及上传项目配 ...
- github的博客搭建以及标签的自动化
github博客搭建以及标签的自动化 引子 没有github的程序员,不是好程序员! BUT 如果有一个*.github.io的blog,会不会更酷? 基于以上原因,本拐也折腾了一下自己的github ...
- Django个人博客搭建8-优化文章模块
Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...
- 【博客搭建2】Sakura主题的配置
提示:该文章适合纯新手,效果可进入我的博客bigdataxy.cc进行查看. [博客搭建2]Sakura主题的配置 主题下载安装 github下载安装包 相关文件介绍 CDN搭建 第一步:创建gith ...
- 【Hexo博客搭建】将其部署到GitHub Pages(二):如何初始化并部署?
简介: 本系列文章属于半笔记半教程的零基础小白入门文,教你将 Hexo 部署到 GitHub Pages 应该怎么做,跟着此系列文章最终可以获得自己的静态博客网站.流程很长,分成不同的篇幅,此为本系列 ...
- Hexo-免费个人博客搭建框架使用
Hexo-免费博客搭建使用讲解 初识hexo就给人以眼前一亮的感觉, 查看资料到自己搭建个人博客, 简直是给人"带你装B,带你F"的快感,简单的博客生成操作, 多样化美观的主题选择 ...
- 博客搭建攻略(三):创造收益
在前两篇博客搭建攻略中,主要介绍了博客平台的选择以及写博的常用工具.作为本系列的最后一篇,可能也是大家最感兴趣的一篇,我将给大家介绍一下在博客编写过程中,是如何创造收益的. 下面,以我个人为例,总结一 ...
- 博客搭建攻略(二):工具推荐
回顾:博客搭建攻略(一):平台选择 预告:博客搭建攻略(三):创造收益,如果兴趣就关注我吧~ 通过上一篇的教程,根据自己的需求选择一款博客平台,就能完成博客的搭建.在这之后,我们的主要任务就是创作内容 ...
最新文章
- 大数据-07-Spark之流数据
- linux 12541 重启监听器,ORA-12541:ORA-12541:TNS:没有监听器 解决方法
- 记录 之 整形数除整形数 产生的数据依然是整形,难搞哦
- glyphicon halflings regular ttf 报错
- 1066. 图像过滤(15)
- mysql 精度_mysql-笔记 精度
- 第29届IEEE IV 征稿启示
- 【BZOJ】2289: 【POJ Challenge】圆,圆,圆
- Java学习日志(19-3-IO流-字节流操作)
- mssql 查询无记录时sum_SQL常见面试题查询
- 阿里云开启关闭防火墙
- 开发者新手指南:一文汇总 Web3 开发工具
- 解决安装Ubuntu系统卡在载入界面,显示正在安装open vm tools
- 「Jenkins Pipeline」- expected to call xxx but wound up catching xxx @20210219
- 如何用代码写一个优雅的个人简历
- alsa-utils工具的使用
- 蜜罐诱捕——KFSensor
- appbarlayout-spring-behavior
- 请注意了!你的APP可能有下架风险,途牛同程携程等多款App登黑榜!
- java read byte_Java RandomAccessFile readByte()方法
热门文章
- 锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制
- 如何做实时监控?—— 参考 Spring Boot 实现
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
- asp生成和导出excel和word数据源码和代码,简单好用(已经测试可以用)
- [C++] Vector对象的合法定义
- Q96:PT(3.5):木纹纹理(Wood Texture)
- PTA: 6-7 两个有序链表序列的合并 (15 分)
- Hive最全学习笔记总结
- 大数据预测分析是否对企业有影响
- 大数据分析如何应用在驾驶世界