第一部分 Ruby/Rails全景 3
第1章 Ruby工作原理 3
1.1 编写Ruby程序的基本过程 3
1.1.1 准备工作 4
1.1.2 Ruby起步指南 4
1.1.3 方法调用和Ruby对象的简单介绍 5
1.1.4 编写和保存示例程序 6
1.1.5 提交Ruby程序 7
1.1.6 键盘和文件输入 8
1.1.7 一个程序,多个文件 11
1.2 激活解释器的方法 12
1.2.1 命令行开关 12
1.2.2 进一步了解交互式Ruby解释器irb 15
1.3 Ruby扩展和程序库 16
1.3.1 使用标准扩展和库 16
1.3.2 使用C的扩展 17
1.3.3 编写扩展和库 17
1.4 剖析Ruby编程环境 18
1.4.1 Ruby源代码的布局 18
1.4.2 Ruby安装目录导航 19
1.4.3 重要的标准Ruby工具和应用程序 20
1.5 小结 23
第2章 Rails工作原理 25
2.1 深入Rails框架 25
2.1.1 从框架使用者的角度看应用开发 26
2.1.2 介绍MVC框架的概念 27
2.1.3 亲身体验MVC 27
2.2 分析Rails的MVC实现 28
2.3 全程开发Rails应用 30
2.3.1 介绍音乐店应用——R4Rmusic 30
2.3.2 为音乐店领域的第一遍迭代建模 31
2.3.3 动作的识别和编程 36
2.3.4 设计视图 38
2.3.5 连接应用程序 43
2.4 全程跟踪Rails的运行 44
2.4.1 阶段1:服务器到分发器 45
2.4.2 阶段2:分发器到控制器 46
2.4.3 阶段3:执行控制器动作 46
2.4.4 阶段4:填充视图 48
2.5 小结 48
第3章 了解Ruby前提下的Rails开发 49
3.1 了解代码在做什么的第一次尝试 50
3.1.1 把Rails看作领域特定语言 50
3.1.2 以配置的风格编写程序代码 53
3.1.3 YAML和实际是编程的配置 54
3.2 开始用Ruby在代码中做更多的事 56
3.2.1 给控制器增加功能 57
3.2.2 部署Rails的辅助文件 58
3.2.3 给模型增加功能 60
3.3 实现与应用相关的技能和任务 61
3.3.1 将遗留数据转换为ActiveRecord 62
3.3.2 基于irb的Rails应用控制台 65
3.4 小结 66
第二部分 Ruby构造块 69
第4章 对象和变量 69
4.1 从“事物”到对象 69
4.1.1 介绍面向对象编程 70
4.1.2 对象 70
4.1.3 更真实的对象建模:入场券的行为 74
4.2 对象的固有行为 78
4.2.1 用object_id方法唯一地标识对象 79
4.2.2 用respond_to?方法查询对象的能力 80
4.2.3 用send方法给对象发送消息 81
4.3 必需参数、可选参数以及默认值参数 82
4.3.1 必需参数和可选参数 82
4.3.2 参数的默认值 82
4.3.3 参数的顺序 83
4.4 局部变量和变量赋值 84
4.4.1 深入分析变量赋值 85
4.4.2 局部变量和看起来像局部变量的东西 87
4.5 小结 87
第5章 用类组织对象 89
5.1 类和实例 89
5.1.1 第一个类 90
5.1.2 实例变量和对象状态 93
5.2 设置方法 95
5.2.1 方法名中的等号 96
5.2.2 ActiveRecord的属性和其他以等号结尾的方法的应用 97
5.3 属性和attr_*方法族 100
5.3.1 自动生成属性操作方法 100
5.3.2 一生二(获取方法/设置方法) 102
5.3.3 attr_*方法小结 102
5.4 类方法和Class类 103
5.4.1 类也是对象 103
5.4.2 什么时候以及为什么编写类方法 104
5.4.3 阐明类方法和实例方法 105
5.4.4 Class类和Class.new 106
5.5 进一步学习常量 107
5.5.1 常量的基本用法 107
5.5.2 常量的重新赋值和常量的改变 108
5.6 继承 109
5.6.1 继承和Rails设计 110
5.6.2 Ruby对象的天性和后习特性 111
5.7 小结 113
第6章 模块和程序组织 114
6.1 创建和使用模块的基础知识 114
6.1.1 封装似栈特性的模块 115
6.1.2 将模块混含到类中 116
6.1.3 进一步发挥模块作用 118
6.2 模块、类和方法查找 120
6.2.1 方法查找的基本说明 120
6.2.2 多次定义同样的方法 123
6.2.3 用super提升方法查找路径 124
6.3 类/模块的设计和命名 126
6.3.1 混含和/或继承 127
6.3.2 Rails源代码和样板代码中的模块组织 129
6.4 小结 131
第7章 默认对象和作用域 132
7.1 理解当前对象或默认对象self 133
7.1.1 谁成为self,在什么位置成为self 133
7.1.2 self作为消息的默认接收者 137
7.1.3 实例变量和self 139
7.2 确定作用域 140
7.2.1 全局作用域和全局变量 141
7.2.2 局部作用域 143
7.2.3 常量的作用域和解析 146
7.3 部署方法访问权限规则 147
7.3.1 私有方法 148
7.3.2 私有方法作为ActionController的访问保护 150
7.3.3 保护方法 151
7.4 编写和使用顶层方法 152
7.4.1 定义顶层方法 153
7.4.2 预定义的(内建的)顶层方法 153
7.5 小结 154
第8章 控制流技术 155
8.1 条件代码执行 156
8.1.1 if关键字及相关构造 156
8.1.2 条件修饰语 158
8.1.3 case语句 159
8.2 用循环重复动作 161
8.2.1 用loop方法实现无条件循环 162
8.2.2 用while和until关键字实现条件循环 163
8.2.3 基于值列表的循环 164
8.3 代码块、迭代器和yield关键字 165
8.3.1 匿名调用代码块的基础知识 165
8.3.2 执行多个迭代 167
8.3.3 使用不同的代码块 168
8.3.4 关于for的更多内容 168
8.4 错误处理和异常 169
8.4.1 抛出异常和营救异常 169
8.4.2 显式抛出异常 171
8.4.3 创建异常类 172
8.5 小结 173
第三部分 内建类和内建模块 177
第9章 内建类和模块基础知识 177
9.1 Ruby的字面构造器 178
9.2 反复出现的语法糖衣 178
9.3 改变或者不改变其接收者的方法 180
9.3.1 改变接收者的方法的基本知识 181
9.3.2 感叹号!方法 182
9.3.3 ActiveRecord对象中特殊化的和扩展了的改变接收者的行为 182
9.4 内建的和定制的to_*(转换)方法 183
9.5 再论迭代器 185
9.6 布尔状态、布尔对象和空对象 186
9.6.1 作为状态的true和false 186
9.6.2 作为对象的true和false 188
9.6.3 特殊对象nil 189
9.7 比较两个对象 190
9.7.1 相等性测试 190
9.7.2 比较和Comparable模块 191
9.8 列出对象的方法 192
9.9 小结 193
第10章 标量对象 195
10.1 使用字符串 195
10.1.1 字符串基础知识 195
10.1.2 字符串操作 197
10.1.3 比较字符串 201
10.2 符号及其用法 202
10.2.1 符号与字符串的关键的不同点 202
10.2.2 重新讲解Rails风格的方法参数 203
10.3 数值对象 204
10.3.1 数值类 204
10.3.2 进行算术运算 205
10.4 时间和日期 206
10.5 小结 209
第11章 集合、容器和可枚举性 210
11.1 数组和散列的比较 210
11.2 使用数组 211
11.2.1 创建一个新数组 211
11.2.2 插入、检索和删除数组元素 212
11.2.3 合并数组 214
11.2.4 数组转换 216
11.2.5 数组迭代、过滤及查询 217
11.2.6 从ActiveRecord集合学习Ruby经验 219
11.3 散列 221
11.3.1 创建一个新的散列 222
11.3.2 插入、检索和删除散列键值对 222
11.3.3 合并散列 224
11.3.4 散列转换 225
11.3.5 散列的迭代、过滤和查询 226
11.3.6 Ruby和Rails方法调用中的散列 228
11.4 集合的中心:Enumerable模块 230
11.4.1 通过each获得可枚举性 230
11.4.2 可枚举的字符串 232
11.5 集合排序 233
11.5.1 排序和Comparable模块 235
11.5.2 在代码块中定义排序顺序 235
11.6 小结 236
第12章 正则表达式和基于它的字符串操作 237
12.1 什么是正则表达式 237
12.1.1 给了解正则表达式的人的话 238
12.1.2 给所有人的话 238
12.2 编写正则表达式 238
12.2.1 正则表达式的字面构造方法 239
12.2.2 构造一个模式 240
12.3 关于匹配和MatchData的更多内容 242
12.3.1 用小括号来捕获子匹配 242
12.3.2 匹配成功和匹配失败 243
12.4 更多的正则表达式技术 245
12.4.1 量词和贪婪性 245
12.4.2 锚和前视断言 247
12.4.3 修饰语 249
12.4.4 字符串与正则表达式之间的转换 249
12.5 使用正则表达式的常见方法 251
12.5.1 String#scan 252
12.5.2 String#split 252
12.5.3 sub/sub!和gsub/gsub! 253
12.5.4 grep 254
12.6 小结 255
第13章 Ruby动态特性 256
13.1 单例类的位置和角色 257
13.1.1 单例方法在何处定义 257
13.1.2 直接检查和修改单例类 258
13.1.3 方法查找路径上的单例类 259
13.1.4 更深入地学习类方法 262
13.2 eval方法族 263
13.2.1 eval 263
13.2.2 instance_eval 264
13.2.3 最有用的eval族方法:class_eval 265
13.3 可调对象 266
13.3.1 Proc对象 267
13.3.2 用lambda关键字生成匿名函数 269
13.3.3 再论代码块 270
13.3.4 作为对象的方法 271
13.4 回调方法和钩子方法 273
13.4.1 用method_missing拦截不能识别的消息 274
13.4.2 用Module#included捕捉混含操作 275
13.4.3 用Class#inherited拦截继承 276
13.4.4 Module#const_missing 278
13.5 覆盖和增加核心功能 278
13.6 小结 280
第四部分 结合Ruby和Rails 283
第14章 再次为R4Rmusic应用领域建模 283
14.1 跟踪ActiveRecord模型实例的功能 284
14.1.1 模型实例功能概览 284
14.1.2 继承的和自动获得的ActiveRecord模型实例行为 284
14.1.3 通过关联半自动获得的行为 287
14.2 改进领域模型 289
14.2.1 抽取和增加模型(publisher和edition) 289
14.2.2 instruments模型和多对多关系 291
14.2.3 为使用建模:顾客和订单 294
14.3 小结 297
第15章 通过编程改进ActiveRecord模型 298
15.1 软模型改进与硬模型改进 299
15.2 模型的软编程改进 301
15.2.1 通过软改进细化Work模型 302
15.2.2 为顾客的业务建模 303
15.2.3 改进composer 304
15.2.4 对比软改进过程中的Ruby和SQL 305
15.3 硬模型改进 306
15.3.1 美化字符串属性 306
15.3.2 计算作品的年代 310
15.3.3 剩余的顾客业务 314
15.4 用类方法扩展模型功能 318
15.5 小结 320
第16章 改进控制器和视图 321
16.1 为视图模板定义辅助方法 322
16.1.1 组织和访问定制的辅助方法 322
16.1.2 为R4RMusic定制的辅助方法 324
16.2 编码和部署部分视图模板 326
16.2.1 剖析主模板 326
16.2.2 在欢迎视图模板中使用部分模板 327
16.3 更新主控制器 331
16.4 加入顾客注册和登录动作 333
16.4.1 登录和注册部分模板 333
16.4.2 登录和保存会话状态 334
16.4.3 用before_filter看守动作 335
16.4.4 实现注册功能 337
16.4.5 编写顾客注销脚本 338
16.5 处理顾客订单 339
16.5.1 view_cart动作和模板 339
16.5.2 查看和购买一个版本 340
16.5.3 定义add_to_cart动作 341
16.5.4 完成订单 342
16.6 通过动态代码使页面个人化 342
16.6.1 从排名到喜好 343
16.6.2 实际使用中的favorites特性 344
16.7 小结 345
第17章 探索Rails源代码的技术 346
17.1 探索技术1:提炼信息 346
17.2 探索技术2:跟踪Ruby 348
17.2.1 选择一个起点 348
17.2.2 正确地在岔路做出选择 348
17.2.3 belongs_to的足迹 349
17.2.4 belongs_to实现机制的翻译 352
17.3 探索技术3:查阅文档 353
17.4 小结 357
附录A Ruby和Rails的安装和资源 358
A.1 Ruby和Rails的在线资源 358
A.2 Ruby和Rails常见安装的说明 359
A.2.1 Windows下的One-ClickRuby和InstantRails安装 359
A.2.2 在*nix系统上从源代码开始安装 359
A.2.3 使用包管理器来安装Ruby 360
A.2.4 安装RubyGems包管理器 360
A.2.5 使用RubyGems安装Rails 361
索引 362