1 飞驰的Rails 开始了 3
这个应用需要做很多事情 3
那么关于这个应用我们需要些什么呢? 4
Rails适用于那些以数据库为中心的应用,就像这个售票系统 6
你可以用rails命令来创建一个新的Web应用 7
现在需要在默认应用中加入你自己的代码 9
支架就是生成的代码 10
数据库中还没有数据表! 14
通过运行迁移来创建这个数据表 15
好棒!你挽救了好朋友的工作! 19
为了更改应用,你需要深入了解应用的架构 20
你的应用包含三个部分:模型(model)、视图(view)、控制器(controller) 21
Rails真情指数 22
这三种不同类型的代码存放在独立的文件夹中 25
视图中的文件需要被编辑 26
编辑视图中的HTML 27
现在这个应用需要存储更多的信息 31
迁移就是Ruby脚本 32
Rails可以生成迁移 33
给你的迁移一个“聪明”的名字,然后Rails就会为你编写代码 34
你需要用rake运行你的迁移 35
但是改动数据库还不够 36
2 Rails应用,生来有序 超越支架 49
支架做的事太多了 49
让我们从生成Mebay模型开始…… 50
然后我们就用rake真正地创建数据表 51
但是控制器是怎样的呢? 52
视图是通过页面模板创建出来的 54
页面模板包含了HTML 55
路由会告诉Rails你的网页在哪儿 57
视图没有要显示的数据 64
那么页面应该显示哪些内容? 65
控制器把广告发送给视图 66
Rails把记录转化成对象 68
数据在内存中,而网页可以看见它们 69
有个问题——用户找不到他们想要的网页 73
路由按照优先级顺序运行 76
为了把数据放入视图,你还需要控制器中的代码 78
索引页面需要来自所有记录的数据 79
Ad.find(:all)一次读取整个数据表 80
数据作为一个称为数组的对象返回 81
数组就是一些编号后的对象序列 82
用for循环读取所有的广告 86
数组中的每个元素都需要HTML 87
Rails把页面模板转换成Ruby代码 88
可以用脚本段把循环加入到页面模板中 89
在循环的每次执行中,页面都会生成一个链接 90
生成的HTML是什么样的呢? 91
但是有两个页面模板……我们要修改每个模板的代码吗? 94
但是MeBay发送过来的新的静态内容怎么办? 97
3 一切都在变化中 插入、更新和删除 104
人们希望在线张贴新广告 104
你已经知道如何搭建一个发布数据库中数据的应用 105
保存数据就像读取数据的反向那样工作 106
你需要一个用来提交数据的表单和一个保存此数据的动作方法 107
表单与对象相关吗? 109
Rails能够创建与模型对象相关联的表单 110
@ ad表单对象还没有被创建 114
表单对象需要在表单被显示之前创建好 115
表单广告对象将在控制器的new动作中被创建 116
现在每个页面模板都有一个匹配的控制器方法 117
表单不会发送回对象,它发送回数据 119
Rails需要在数据被保存之前把数据转化成对象 120
手把手教你控制器的create方法 121
控制器需要保存记录 122
不要创建新页面,使用现有页面 128
但是控制器动作如何才能显示另一个动作的页面呢? 129
重定向使控制器能够指定显示哪个视图 130
但是如果广告在张贴后需要修改该怎么办? 133
更新广告就像创建广告一样……只有一点小区别 134
你需要找到一个广告而不是创建它, 135
你需要更新这个广告而不是保存它 135
限制对某个功能的访问 142
但是现在旧广告需要被删掉 145
自己编写代码可以让你实现比支架更多的功能 151
4 事实还是推论? 数据库查询器 154
Rubyville健身俱乐部让你保持体形 154
这个应用其实看起来很接近教练们的需求…… 157
我们选择修改支架 158
设计搜索功能 159
让我们从建立表单开始 160
为界面添加搜索功能 163
我们如何查找客户记录呢? 171
我们只需要那些client-name=搜索字符串的记录 172
每个属性都有一个查询器 173
我们需要匹配客户名字或者教练名字 178
查询器生成数据库查询 179
我们需要修改SQL查询中的条件 180
使用:conditions来提供SQL 181
5 防止错误 验证你的数据 188
注意——应用里有错误数据 188
验证代码放在模型中 190
Rails使用验证器来实现简单验证 191
验证器是如何工作的? 192
让我们检查某些东西是否是数字 194
用户在他们的健身表单中漏填了一些数据 196
我们该如何检查必须填写的域? 197
验证器很简单而且工作得很好 200
MeBay发生了很奇怪的事情 203
验证器有效,但是它们没有显示错误 204
如果你搭建自己的页面,你需要编写自己的错误消息代码 207
控制器需要知道是否存在错误 208
我们还要显示错误消息! 212
MeBay系统现在看起来挺滋润 214
6 把它们集合起来 建立连接 220
椰子航空需要一个订票系统 220
我们需要在一个页面上同时看到航班和座位预订信息 222
让我们看看座位支架代码给了我们什么 223
我们需要让预订表单和座位列表出现在航班页面上 224
我们怎样才能把个页面的内容分解到几个文件里呢? 225
ERb将组织我们的页面 229
我们如何创建预订表单局部模板? 230
现在我们需要在模板中包含局部模板 231
我们需要给局部模板一个seat变量! 234
你可以把局部变量传递给局部模板 235
我们还需要为座位列表做一个局部模板 242
人们最终登上了错误的航班 244
关系把不同模型连接起来 245
但我们如何定义关系呢? 247
但有些人有太多的行李 249
我们需要编写自己的验证器 250
我们需要反转关系 253
这个系统在椰子航空投入运行 260
7 减少流量 ajax 264
椰子航空有个新的促销计划 264
页面的哪一部分变化最快? 265
浏览器不总是更新整个页面吗? 270
还有什么方法可以发送请求? 271
首先我们需要包含Ajax库…… 272
接下来我们需要添加一个Ajax “Refresh”链接 273
浏览器需要主动询问更新 278
我们一定要让浏览器反复询问吗? 279
你可以像监听按钮事件一样监听定时器事件 280
Ajax真情指数 284
有些人的单身派对有问题了 285
表单需要生成一个Ajax请求 286
表单需要由JavaScript来控制 287
我们需要替换create方法 289
这段代码会有怎样的效果呢? 290
航班预订有个问题 295
我们只知道如何一次更新页面的一部分内容 296
控制器需要返回JavaScript而不是HTML 297
那么Rails生成了些什么? 301
如果你没有表明在哪儿放置响应,那么它就会被执行 302
8 现在看起来都不一样了……XML和多种表现形式 308
在世界各地登山 308
用户讨厌这个界面! 309
数据需要在地图上 310
我们需要创建一个新的动作 311
新动作看起来可以工作…… 312
新页面需要一幅地图……这才是关键! 313
我们需要什么样的代码呢? 314
这段代码仅能工作在本地主机上 315
现在我们需要地图数据 316
我们需要生成什么样的数据呢? 318
我们从模型中生成XML 319
模型对象能够生成XML 320
控制器代码看起来是什么样呢? 321
此时,在20 000英尺的高度…… 326
我们需要生成XML和HTML 327
XML和HTML仅仅只是表现形式而已 329
我们应该如何确定使用哪一种格式? 330
地图页面是如何工作的呢? 334
代码可以正式运行了 336
RSS源就是XML 344
我们将创建一个名叫news的动作 345
我们必须更改XML的结构 348
所以我们将使用一种新模板:XML Builder 349
现在让我们把源加入到页面中 353
在世界最高点! 355
9 更上一层楼 REST与Ajax 358
事件太多了! 358
地图可以显示更多的详细信息 359
我们能够扩展基于Ajax的地图 360
但我们怎样才能改变索引页面呢? 361
“show”动作需要生成怎样的内容? 362
新的地图功能成功了! 367
我们也需要使用Ajax来创建请求 368
地图局部模板可以让我们指定一个“new”动作 370
我们如何证明一个事件已经被保存? 375
表单需要更新弹出窗口的〈div〉的内容 376
雪崩! 381
现在编辑是如何实现的…… 382
我们可以在弹出窗口中加入一个“Edit”链接 383
我们从修改“edit”动作开始 384
我们还需要在show页面上增加一个新链接 386
那么我们该如何使用link_to辅助函数? 387
让Ajax链接来拯救我们 391
我们用错了路由! 393
HTTP方法是选择路由的一个因素 394
什么是HTTP方法? 395
Head First Climbers需要你! 398
10 真实世界里的Rails 真实世界里的应用 405
看!这儿有满满一页的Ruby “试试看” 405
Web应用也需要测试 406
有哪些类型的测试可用呢? 407
上线运行 408
那么你该如何更改数据库配置呢? 409
什么是REST? 410
迷失方向的Web应用 411
生活在Edge上 412
获取更多的信息 413
消遣性读物…… 414
相关话题的“深入浅出”系列书籍 415
离开Rails村…… 417