目 录
第1章 简介... 1
1.1 Rails是敏捷的... 3
1.2 读你所需... 4
Rails的版本... 6
1.3 致谢... 6
来自Dave Thomas的感谢... 7
来自David Heinemeier Hansson的感谢... 7
第2章 Rails应用的架构... 11
2.1 模型,视图,以及控制器... 11
2.2 Active Record:Rails的模型支持... 15
数据库为中心的程序设计... 15
对象/关系映射(ORM)... 17
2.3 Action Pack:视图与控制器... 19
视图支持... 19
还有……控制器!... 19
第3章 安装Rails. 21
3.1 Windows上的安装... 21
3.2 Mac OS X上的安装... 22
3.3 Unix/Linux上的安装... 22
3.4 Rails和数据库... 23
3.5 保持更新... 26
3.6 Rails与ISP. 26
第4章 立竿见影... 27
4.1 新建一个应用程序... 27
4.2 Hello, Rails! 29
Rails和请求URL. 30
我们的第一个action. 31
让它动起来... 33
4.3 把页面链起来... 39
4.4 我们做了什么... 43
第5章 Depot应用程序... 47
5.1 增量式开发... 47
5.2 Depot做些什么... 48
用例... 48
页面流... 50
数据... 52
5.3 让我们编码吧... 53
第6章 任务A:货品维护... 53
6.1 迭代A1:跑起来再说... 53
创建Rails应用程序... 53
创建数据库... 54
创建货品表... 54
配置应用程序... 55
创建“货品维护”应用... 56
Rails脚手架... 58
6.2 迭代A2:填加缺失的字段... 61
6.3 迭代A3:检查一下!... 64
6.4 迭代A4:更美观的列表页... 67
我们做了什么... 70
第7章 任务B:分类显示... 71
7.1 迭代B1:创建分类列表... 71
7.2 迭代B2:添加页面装饰... 74
我们做了什么... 77
第8章 任务C:创建购物车... 79
8.1 Session. 79
8.2 更多的表,更多的模型... 81
8.3 迭代C1:创建购物车... 83
美化购物车... 89
8.4 迭代C2:处理错误... 91
Flash. 92
8.5 迭代C3:完成购物车... 95
我们做了什么... 99
第9章 任务D:结帐!... 101
9.1 迭代D1:获得定单... 102
Rails和表单... 103
9.2 迭代D2:在付账页面显示购物车内容... 110
我们做了什么... 114
第10章 任务E:发货... 115
10.1 迭代E1:基本的发货功能... 115
我们做了什么... 123
第11章 任务F:管理... 125
11.1 迭代F1:添加用户... 125
11.2 迭代F2:登录... 130
11.3 迭代F3:访问控制... 132
没有管理员了……... 133
更新边栏... 134
用户登出... 135
11.4 扫尾... 136
11.5 蛋糕上加点奶油... 137
我们做了什么... 138
第12章 任务T:测试... 139
12.1 加上测试... 139
12.2 模型的测试... 140
你的第一个测试,已经在等你了... 141
用于测试的数据库... 142
测试夹具... 143
创建和读取... 145
更新... 146
销毁... 147
保持测试的灵活性... 148
测试模型的业务规则... 149
动态夹具... 150
为了共享的夹具... 151
测试助手... 153
自定义断言... 154
12.3 控制器的测试... 155
用户登录... 155
功能测试的便利工具... 159
已经买了东西!... 163
12.4 使用Mock对象... 168
12.5 测试驱动开发... 169
12.6 用Rake运行测试... 172
创建测试数据库... 172
运行测试... 173
安排持续构建... 174
生成统计信息... 174
12.7 性能测试... 175
事务性夹具... 177
性能监控与评测... 178
我们做了什么... 178
第13章 深入Rails. 181
13.1 Rails在哪儿?... 181
13.2 目录结构... 181
13.3 Rails配置... 185
运行时环境... 185
配置数据库连接... 186
环境... 187
配置参数... 188
13.4 命名约定... 188
混合大小写,下划线,以及复数形式... 188
按模块组织控制器... 191
13.5 Active Support 192
对“数量”的扩展... 192
对时间的扩展... 193
字符串的扩展... 194
13.6 Rails的日志... 194
13.7 调试信息... 194
13.8 精彩预告... 196
第14章 ActiveRecord基础... 1
14.1 表和类... 1
14.2 字段和属性... 2
属性的访问... 4
Boolean型属性... 4
保存结构化数据... 5
14.3 主键与ID.. 6
14.4 连接数据库... 7
14.5 CRUD.. 8
新建记录... 9
读取现有记录... 10
14.6 表间关联... 19
创建外键... 20
指定关联... 21
一对一关联... 22
一对多关联... 25
多对多关联... 29
自引用的连接... 31
预先读取子记录... 32
计数器... 33
14.7 事务... 34
内建事务... 38
多数据库事务... 38
第15章 再论ActiveRecord. 1
15.1 Acts As 1
Acts As List 1
Acts As Tree. 3
15.2 聚合... 4
复合对象是值对象... 8
15.3 单表继承... 8
15.4 校验... 11
校验辅助方法... 12
15.5 回调... 17
记录时间戳... 18
回调对象... 19
Observer 22
15.6 高级属性... 22
Façade字段... 24
15.7 杂录... 25
对象ID.. 25
使用裸连接... 25
缺失ID的时候……... 26
魔术字段... 26
第16章 ActionController与Rails. 289
16.1 环境与依赖... 289
16.2 基础... 290
16.3 请求的路由... 291
URL生成... 294
控制器命名... 298
具名路由... 301
16.4 Action方法... 302
控制器环境... 303
应答... 304
模板的渲染... 305
发送文件和其他数据... 308
重定向... 309
16.5 Cookie和Session. 312
Rails的Session对象... 313
16.6 Flash——Action之间的通信... 322
16.7 过滤器与校验... 324
前置/后置过滤器... 324
后置过滤器和应答篡改... 326
环绕过滤器... 327
过滤器的继承... 327
输入校验... 327
16.8 缓存初接触... 329
缓存什么... 331
缓存页面的失效策略... 332
16.9 GET请求的问题... 335
解决GET问题... 336
第17章 ActionView.. 339
17.1 模板... 339
模板在哪里... 339
模板的运行环境... 340
模板里面有什么... 340
17.2 Builder模板... 341
17.3 RHTML模板... 342
转义替换... 343
17.4 辅助方法... 344
共享辅助方法... 346
17.5 格式化辅助方法... 347
17.6 链接到别的页面或资源... 349
17.7 分页... 352
17.8 表单辅助方法... 353
表单辅助方法... 354
字段辅助方法... 354
Rails应用的文件上传... 361
错误处理与模型对象... 364
处理与模型对象无关的字段... 365
17.9 布局与组件... 367
布局... 367
寻找布局模板... 368
局部页面模板... 370
组件... 373
17.10 再论缓存... 377
缓存片段的失效... 379
片段缓存的存储选择... 380
17.11 新增模板系统... 381
创建动态模板... 382
第18章 Web 2.0. 339
18.1 AJAX简介... 339
XMLHttpRequest 341
AJAX的“A”. 341
18.2 Rails的做法... 342
link_to_remote. 343
form_remote_tag() 345
Observers. 346
定时更新... 349
18.3 再论用户界面... 350
文档对象模型操作... 350
可视化效果... 351
18.4 高级技巧... 355
替换技术... 355
再谈回调... 355
不需要AJAX的可视化效果... 361
测试... 362
向后兼容... 363
Web V2.1. 364
第19章 ActionMailer. 411
19.1 发送邮件... 411
邮件配置... 411
发送邮件... 413
19.2 接收邮件... 418
19.3 电子邮件的测试... 420
电子邮件的单元测试... 420
电子邮件的功能测试... 421
第20章 Web Service与Rails. 423
20.1 AWS是什么(以及不是什么)... 423
20.2 API定义... 424
方法签名... 427
20.3 分发模式... 429
直接分发... 430
分层分发... 430
委派分发... 430
20.4 使用别的分发机制... 432
分层分发模式... 432
实现委派分发... 433
20.5 拦截方法调用... 433
20.6 Web Service的测试... 435
外部客户应用(SOAP)... 436
外部客户应用(XML-RPC)... 436
20.7 协议客户端... 438
第21章 保护Rails应用... 439
21.1 SQL注入... 439
防御SQL注入攻击... 440
将查询变成模型对象的方法... 441
21.2 跨站点脚本(CSS/XSS)... 442
一次典型的攻击... 442
防御XSS攻击... 443
利用echo服务的XSS攻击... 444
21.3 防御session定置攻击... 445
21.4 Creating Records Directly from Form Parameters 446
21.5 不要相信ID参数... 447
21.6 不要暴露控制器方法... 448
21.7 文件上传... 450
21.8 不要缓存需要身份认证的页面... 450
21.9 知己知彼... 451
第22章 部署与伸缩... 453
22.1 选择发布平台... 453
选择web服务器... 454
选择伺服模式... 458
22.2 运行环境的三位一体... 461
切换到生产环境... 462
22.3 荒野中的迭代... 463
处理错误... 463
发布变更... 465
在控制台监视应用程序... 466
22.4 维护... 467
日志文件... 467
清扫session. 468
22.5 伸缩:无共享架构... 469
为Rails提供无共享环境... 469
22.6 寻找并解决性能瓶颈... 472
用tail监控日志... 473
超越tail 474
22.7 案例分析:每天运行的Rails 476
37signals开发的Basecamp(www.basecamphq.com)... 477
Robot Co-op开发的43 Things(www.43things.com)... 477
抵押处理引擎(www.rapidreporting.com)... 478
附录A Ruby简介... 481
A.1 Ruby是一种面向对象的语言... 481
A.2 Ruby中的名称... 482
A.3 方法... 483
A.4 类... 485
private和protected. 487
A.5 模块... 487
A.6 数组与hash. 488
hash与参数列表... 489
A.7 控制结构... 489
A.8 正则表达式... 490
A.9 代码块与迭代器... 490
A.10 异常... 491
A.11 对象序列化... 492
A.12 交互式的Ruby. 492
A.13 Ruby惯用法... 493
A.14 RDoc文档... 494
附录B 配置参数... 481
B.1 ActiveRecord配置... 481
B.2 ActionPack配置... 482
B.3 ActionMailer配置... 484
B.4 TestCase配置... 484
附录C 源代码... 481
C.1 完整的Depot应用... 481
数据库文件... 481
辅助模块... 482
单元测试和功能测试... 482
性能测试... 482
CSS文件... 482
C.2 系统提示程序范例... 482
C.3 代码示例交叉引用... 483
附录D 资源... 481
D.2 推荐书目... 481
索引... 533
更多精彩陆续放送,敬请关注!