第1章 导言 1
1.1 使用Rails的理由 1
1.1.1 生产力趋于自由 1
1.1.2 不自由的生产力 2
1.2 选择本书的理由 3
1.3 本书读者 3
1.3.1 阅读本书的方法 4
1.3.2 跟踪本书动态 4
1.4 两个Rails的故事 4
1.4.1 Aure 4
1.4.2 Michael 6
第1部分 基础知识 10
第2章 入门指南 10
2.1 预备知识 10
2.1.1 设置开发环境 12
2.1.2 执行rails 12
2.1.3 开发服务器 14
2.2 第一个页面 15
2.2.1 生成一个控制器 16
2.2.2 Site控制器 17
2.2.3 RailsURL 19
2.2.4 改变路由 20
2.3 Rails视图 20
2.4 页面布局 22
2.4.1 ERb、操作和实例变量 24
2.4.2 回顾:切分一个页面 25
2.4.3 添加导航栏 26
2.4.4 哈希表 27
2.4.5 符号 28
2.4.6 完善linkto 28
2.4.7 一些风格的问题 29
2.4.8 完善导航栏 30
2.4.9 自己动手查找 30
2.5 基于样式的开发 31
第3章 用户建模 34
3.1 创建用户模型 34
3.1.1 安装数据库 34
3.1.2 migration和用户模型 37
3.1.3 针对用户模型的第一版本的migration代码 37
3.1.4 运行migration 39
3.2 用户模型验证 41
3.2.1 控制台 41
3.2.2 一个简单的验证机制 43
3.2.3 验证机制的执行 45
3.2.4 改进验证机制 46
3.2.5 全功能的验证机制 47
3.2.6 有魔法的列 49
3.3 进一步确保数据完整性 51
第4章 用户注册 53
4.1 User控制器 53
4.2 用户注册:视图 54
4.2.1 注册视图:外观 54
4.2.2 理解注册视图 58
4.2.3 精化注册表单 59
4.2.4 享受表单并调试它 61
4.3 用户注册:实际操作 63
4.3.1 表单错误信息 67
4.3.2 Flash 70
4.3.3 完成后的register函数 72
4.3.4 中心页面的占位模块 73
4.4 添加注册链接 74
4.5 一个示例用户 78
第5章 测试入门 79
5.1 测试哲学 80
5.2 配置测试数据库 80
5.3 测试site控制器 81
5.3.1 有价值的测试 82
5.3.2 测试是否过度 84
5.4 测试注册机制 84
5.4.1 运行功能测试 84
5.4.2 针对注册机制的基本测试 85
5.4.3 测试成功的注册 87
5.4.4 测试不成功的注册 88
5.4.5 执行测试 90
5.4.6 是否还需要其他针对注册功能的测试 91
5.5 基本的User模型测试 91
5.6 详细的User模型测试 94
5.6.1 测试唯一性 95
5.6.2 测试用户名长度 96
5.6.3 使用控制台 97
5.6.4 测试密码长度 98
5.6.5 测试正则表达式 100
5.6.6 执行所有测试 106
第6章 登录和注销 108
6.1 使用session维护状态 108
6.2 登录 110
6.2.1 跟踪登录状态 110
6.2.2 注册时自动登录 110
6.2.3 基于session变量的调试 111
6.2.4 登录视图和操作 115
6.2.5 针对有效登录的测试 117
6.2.6 针对无效登录的测试 119
6.3 注销 120
6.3.1 测试注销操作 122
6.3.2 测试导航功能 122
6.4 保护页面 124
6.4.1 愚笨的页面保护 124
6.4.2 巧妙的页面保护 125
6.4.3 测试页面保护 127
6.5 友好的URL转向 128
6.5.1 request变量 128
6.5.2 友好的登录后转向 132
6.5.3 友好的注册后转向 133
6.5.4 友好性测试 134
6.6 对基本的登录功能进行重构 135
6.6.1 loggedin? 136
6.6.2 login! 139
6.6.3 logout! 142
6.6.4 clear_password! 143
6.6.5 消除表单处理中的重复代码 145
6.6.6 消除友好转向中的重复代码 146
6.6.7 健康状态检查 148
第7章 高级登录功能 149
7.1 记忆功能 149
7.1.1 Remember Me?复选框 149
7.1.2 Remember Me属性 152
7.1.3 Remember Mecookie 153
7.2 真正记住用户 158
7.2.1 验证cookie 159
7.2.2 记起曾经记住的 160
7.2.3 更新logout函数 162
7.2.4 更安全的cookie 164
7.2.5 完成的(?)函数 166
7.3 Remember Me测试 167
7.3.1 更新后的登录测试 167
7.3.2 更新后的注销测试 172
7.4 高级测试:集成测试 173
7.4.1 测试cookie记忆:第一个片断 173
7.4.2 对测试代码进行测试:一个警示 175
7.4.3 对Rails测试的一些反思 177
7.5 再次重构 177
7.5.1 对记住用户信息的代码进行重构 178
7.5.2 对忘记用户信息的代码进行重构 180
7.5.3 两点改进 181
7.5.4 彻底重构后的login函数 183
7.5.5 最后需要考虑的问题 185
第8章 更新用户信息 186
8.1 不仅仅是占位页面的中心 186
8.2 更新E-mail地址 187
8.3 更新密码 189
8.4 测试用户编辑功能 196
8.4.1 测试辅助函数 196
8.4.2 测试编辑页面 200
8.4.3 高级测试 201
8.5 partials 203
8.5.1 两个简单的partial 203
8.5.2 更高级的partial 204
8.5.3 最后一个小错误 206
8.5.4 更新登录和注册操作 207
第2部分 创建一个社交网络 212
第9章 个人配置信息 212
9.1 用户配置信息占位页面 213
9.1.1 用户配置信息页面的URL 213
9.1.2 Profile控制器和操作 214
9.2 用户规格描述 216
9.2.1 创建Spec模型 216
9.2.2 Spec模型 218
9.2.3 模型整合 220
9.3 编辑用户规格 221
9.3.1 Spec规格控制器 221
9.3.2 一个HTML公共工具程序 223
9.3.3 规格描述的编辑视图 225
9.3.4 保护规格描述的相关页面 226
9.3.5 测试规格描述功能 227
9.4 更新用户中心 230
9.4.1 新的hub视图 231
9.4.2 显示规格描述信息的方框 234
9.4.3 命名路由和配置信息相关的URL 235
9.4.4 用户中心的主要内容 237
9.5 个人FAQ:兴趣与个性 240
9.5.1 FAQ模型 240
9.5.2 FAQ控制器 243
9.5.3 编辑FAQ 243
9.5.4 将FAQ添加到用户中心 245
9.5.5 测试FAQ功能 248
9.6 面向公众的配置信息 249
第10章 社区 252
10.1 创建一个社区(Community控制器) 252
10.2 创建示例用户 253
10.2.1 收集数据 253
10.2.2 载入数据 254
10.3 社区索引 256
10.3.1 find操作中的新技巧 257
10.3.2 index操作 259
10.3.3 字典序索引 261
10.3.4 显示索引结果 263
10.4 对结果进行完善 267
10.4.1 添加分页功能 267
10.4.2 结果摘要信息 268
第11章 搜索与浏览 271
11.1 搜索 271
11.1.1 搜索视图 271
11.1.2 Ferret 273
11.1.3 使用find_by_contents进行搜索 275
11.1.4 为搜索页面添加分页功能 277
11.1.5 规则的异常 280
11.2 测试搜索页面 282
11.3 着手浏览功能 284
11.3.1 浏览页面 284
11.3.2 通过A/S/L查找(暂时保留L) 286
11.4 区域、区域、区域 290
11.4.1 本地的地理信息数据库 290
11.4.2 使用GeoData进行区域搜索 292
11.4.3 区域名称 295
11.4.4 添加浏览验证 296
11.4.5 最终的社区主页 301
第12章 头像 303
12.1 为上传头像做准备 303
12.1.1 调整一个模型 304
12.1.2 头像上传页面 305
12.1.3 用于头像功能的partial 308
12.2 维护头像信息 310
12.2.1 ImageMagick和图像转换 310
12.2.2 save方法 313
12.2.3 添加验证机制 315
12.2.4 删除头像 317
12.2.5 测试头像功能 319
第13章 E-mail 322
13.1 Action Mailer 322
13.1.1 配置 322
13.1.2 密码提醒 323
13.1.3 添加提醒链接以及发送提醒信息 325
13.1.4 测试提醒功能 327
13.2 双向隐藏的E-mail系统 330
13.2.1 E-mail链接 330
13.2.2 correspond操作和E-mail表单 331
13.2.3 E-mail邮件 334
13.2.4 测试双向隐藏的E-mail 336
第14章 交友系统 340
14.1 为交友系统创建数据模型 340
14.1.1 抽象的朋友关系 340
14.1.2 Friendship模型 341
14.1.3 创建未决定的朋友关系 343
14.1.4 朋友关系请求 344
14.1.5 完成Friendship模型 345
14.1.6 测试Friendship模型 346
14.2 朋友关系请求 348
14.2.1 建立朋友关系请求的链接 348
14.2.2 控制请求 350
14.3 管理朋友关系请求 352
14.3.1 has-many:through 352
14.3.2 交友中心 354
14.3.3 Friendship操作 357
14.3.4 测试建立朋友关系的请求 359
第15章 REST风格的博客 361
15.1 应该休息(REST)一下了 361
15.1.1 REST和CRUD 362
15.1.2 URL修饰符 364
15.1.3 房间里的大象:分号 365
15.1.4 应答格式和一个免费的API 366
15.2 用于REST风格的博客的脚手架 367
15.2.1 第一个REST风格的资源 367
15.2.2 博客中的帖子 369
15.2.3 Posts控制器 372
15.3 创建真正的博客 375
15.3.1 连接到模型 375
15.3.2 博客和帖子的路由 376
15.3.3 真正的Posts控制器 377
15.3.4 博客管理 380
15.3.5 创建帖子 381
15.3.6 显示帖子 383
15.3.7 编辑帖子 386
15.3.8 发表帖子 387
15.3.9 最后一个琐碎的细节 389
15.4 REST风格的测试 391
15.4.1 默认的REST功能测试 391
15.4.2 两个自定义测试 393
第16章 基于AJAX的博客评论功能 395
16.1 REST风格的评论功能 395
16.1.1 评论资源 395
16.1.2 Comment模型及其关联 396
16.1.3 Comments控制器和抢先式的partial 398
16.1.4 为评论相关的请求提供路由 399
16.2 进入AJAX 400
16.2.1 新评论 401
16.2.2 创建评论 404
16.2.3 删除评论 406
16.3 视觉效果 408
16.3.1 RJS文件和第一个特效 408
16.3.2 另两个特效 410
16.3.3 取消按钮 411
16.3.4 优雅地退而求其次 411
16.4 调试和测试 413
16.4.1 再次审视new 413
16.4.2 基于xhr的AJAX测试 414
第17章 接下来的操作 416
17.1 部署的考虑点 416
17.1.1 软件和硬件选项 416
17.1.2 在生产模式中运行 417
17.1.3 最基本的生产服务器环境 418
17.1.4 伸缩性 420
17.1.5 管理基础 421
17.2 与Ruby and Rails相关的更多信息 423