20小时学会编程 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

编码、测试和修改

在这一点上,我打算描述我在做什么以及我是怎么做的。如果你想跟进的话,你可以在https://github.com/first20hours/codex看到完整的代码。

当这个应用完成之后,我想要的效果如下:

codex

你将会注意到,这个设计共有三个部分:顶部的导航栏主要内容区域以及侧边栏。我使用由推特开发人员Mark OttoJacob Thornton创建的引导程序(Bootstrap)把这些基本设计放在一起。

无须从头开始创建一个网络设计,引导程序(Bootstrap)是一个预先编写的免费使用的HTMLCSS程序库。使用引导程序(Bootstrap)可以节省大量的时间:你可以几分钟内把你想要的应用程序的基本原型放在一起,无须花费数天时间。

这个应用的基本单位是“页面”,它们可以显示储存在数据库的记录。页面的信息显示在主内容区。有一个按钮可以引导到显示数据库所有页面明细的屏幕。它的底部有两个按钮,第一个按钮让你可以编辑当前的页面,然后第二个按钮让你可以删除它。

侧边栏主要包含三个部分。首先,它的顶部有一个让你可以创建一个新页面的表格,这个页面需要标题。其次,它的侧边栏有一个用户增加的页面列表,其功能是作为快速参考部分。再次,它有一个格式参考,可以帮助用户记住如何使用常见的格式功能。

顶部的导航栏非常简单。它包含到达主页的链接以及到达“页面列表”屏幕的次级链接。如果我想的话,我迟一些还可以在导航栏上添加项目,但是我现在真正需要的就那些。

每个网络应用都有一个主页,所以我需要决定哪个主页应该包含什么内容。在这种情况下,我只想要显示数据库的主要记录。

所以一个页面应该包含什么呢?由于每个页面都是一个数据库记录,而记录拥有包含实际信息的领域,所以我需要告诉DataMapper应该建立哪些领域。代码如下:

class Page 
include DataMapper:Resource 
property:id, Serial 
property:title, String 
property:content, Text 
property:lastupdated, DateTime
end
DataMapper.finalize

这个代码使用DataMapper创建一种叫作页面的新型对象。Ruby现在可以使用一个像任何其他对象那样的页面,并且我可以创建和使用建立、修正和删除页面的方法。当我对一个页面作出变更的时候,那个变更就会通过DataMapper储存到数据库当中。

如果这些领域不存在的话,那么命令Datamapper.finalize可以告诉应用在实际数据库里面建立它们。

既然数据库已经建立领域,现在该弄明白Sinatra将服务于哪些路径了。基于直到目前为止我所知道的,我的列表如下:

# Show home page
get ‘/’
# Creates new note from “new page” form
post ‘/’
# Displays requested note
get ‘/:url/’
# Edits requested note
get ‘/:url/edit’
# Saves user edits to note
post ‘/:url/edit’
# Deletes specified note
delete ‘/:url/’
# List all pages in database
get ‘/all/’
# Error handling
not_found
error

这是一份非常好的列表。我的应用将会围绕我为每条路径所创建的命令。