具体描述
本书系统地介绍了如何用Rails 构建Web 应用。具体内容包括:Ruby、Rails、HTML、CSS、数据库、版本控制、测试以及部署的基本知识。本书大大降低了初学者的门槛,被读者和很多资深程序员誉为“Rails 入门圣经”。
作者简介
Michael Hartl
Ruby专家,畅销书作者,教学网站LearnEnough.com创始人之一。因为对Ruby社区的贡献,于2011年被授予Ruby Hero奖。毕业于哈佛学院,获得了加州理工学院物理学博士学位,同时还是Y Combinator创业者项目的毕业生。
目录信息
1.1 简介 3
1.1.1 预备知识 3
1.1.2 排版约定 5
1.2 搭建环境 6
1.2.1 开发环境 6
1.2.2 安装Rails 9
1.3 第一个应用 9
1.3.1 Bundler 12
1.3.2 rails server 16
1.3.3 模型?视图?控制器 19
1.3.4 Hello, world! 20
1.4 使用Git做版本控制 23
1.4.1 安装和设置 23
1.4.2 使用Git的好处 24
1.4.3 Bitbucket 25
1.4.4 分支、编辑、提交、合并 28
1.5 部署 32
1.5.1 搭建Heroku部署环境 32
1.5.2 Heroku部署第一步 34
1.5.3 Heroku部署第二步 34
1.5.4 Heroku命令 35
1.6 小结 35
第2章 玩具应用 37
2.1 规划应用 37
2.1.1 User模型 40
2.1.2 Micropost模型 40
2.2 Users资源 41
2.2.1 浏览用户相关的页面 42
2.2.2 MVC实战 47
2.2.3 Users资源的不足 52
2.3 Microposts资源 52
2.3.1 概览Microposts资源 52
2.3.2 限制微博的长度 56
2.3.3 一个用户拥有多篇微博 57
2.3.4 继承体系 60
2.3.5 部署这个玩具应用 62
2.4 小结 63
第3章 基本静态的页面 65
3.1 创建演示应用 65
3.2 静态页面 69
3.2.1 生成静态页面 69
3.2.2 修改静态页面中的内容 75
3.3 开始测试 77
3.3.1 第一个测试 78
3.3.2 遇红 79
3.3.3 变绿 80
3.3.4 重构 82
3.4 有点动态内容的页面 82
3.4.1 测试标题(遇红) 83
3.4.2 添加页面标题(变绿) 84
3.4.3 布局和嵌入式Ruby(重构) 87
3.4.4 设置根路由 92
3.5 小结 94
3.6 高级测试技术 95
3.6.1 MiniTest报告程序 95
3.6.2 使用Guard自动测试 96
第4章 Rails背后的Ruby 102
4.1 导言 102
4.1.1 内置的辅助方法 102
4.1.2 自定义辅助方法 103
4.2 字符串和方法 105
4.2.1 注释 106
4.2.2 字符串 107
4.2.3 对象和消息传送 109
4.2.4 定义方法 111
4.2.5 回顾标题的辅助方法 112
4.3 其他数据结构 113
4.3.1 数组和值域 113
4.3.2 块 116
4.3.3 散列和符号 118
4.3.4 重温引入CSS的代码 122
4.4 Ruby类 123
4.4.1 构造方法 123
4.4.2 类的继承 124
4.4.3 修改内置的类 126
4.4.4 控制器类 128
4.4.5 User类 130
4.5 小结 131
第5章 完善布局 133
5.1 添加一些结构 133
5.1.1 网站导航 134
5.1.2 Bootstrap和自定义的CSS 140
5.1.3 局部视图 145
5.2 Sass和Asset Pipeline 150
5.2.1 Asset Pipeline 150
5.2.2 句法强大的样式表 151
5.3 布局中的链接 157
5.3.1 “联系”页面 158
5.3.2 Rails路由 159
5.3.3 使用具名路由 161
5.3.4 布局中链接的测试 163
5.4 用户注册:第一步 166
5.4.1 Users控制器 166
5.4.2 “注册”页面的URL 168
5.5 小结 170
第6章 用户建模 172
6.1 User模型 172
6.1.1 数据库迁移 173
6.1.2 模型文件 177
6.1.3 创建用户对象 178
6.1.4 查找用户对象 180
6.1.5 更新用户对象 181
6.2 验证用户数据 182
6.2.1 有效性测试 183
6.2.2 存在性验证 184
6.2.3 长度验证 187
6.2.4 格式验证 188
6.2.5 唯一性验证 193
6.3 添加安全密码 198
6.3.1 计算密码哈希值 199
6.3.2 用户有安全的密码 200
6.3.3 密码的最短长度 202
6.3.4 创建并验证用户的身份 203
6.4 小结 205
第7章 注册 207
7.1 显示用户的信息 207
7.1.1 调试信息和Rails环境 209
7.1.2 Users资源 212
7.1.3 调试器 216
7.1.4 Gravatar头像和侧边栏 217
7.2 注册表单 222
7.2.1 使用form_for 223
7.2.2 注册表单的HTML 225
7.3 注册失败 228
7.3.1 可正常使用的表单 229
7.3.2 健壮参数 231
7.3.3 注册失败错误消息 233
7.3.4 注册失败的测试 237
7.4 注册成功 240
7.4.1 完整的注册表单 241
7.4.2 闪现消息 242
7.4.3 首次注册 244
7.4.4 注册成功的测试 246
7.5 专业部署方案 248
7.5.1 在生产环境中使用SSL 249
7.5.2 生产环境中的Web服务器 249
7.5.3 部署到生产环境 250
7.6 小结 252
第8章 基本登录功能 253
8.1 会话 253
8.1.1 Sessions控制器 254
8.1.2 登录表单 256
8.1.3 查找并验证用户的身份 259
8.1.4 渲染闪现消息 261
8.1.5 测试闪现消息 263
8.2 登录 265
8.2.1 log_in方法 265
8.2.2 当前用户 267
8.2.3 修改布局中的链接 270
8.2.4 测试布局中的变化 274
8.2.5 注册后直接登录 277
8.3 退出 279
8.4 小结 281
第9章 高级登录功能 283
9.1 记住我 283
9.1.1 记忆令牌和记忆摘要 283
9.1.2 登录时记住登录状态 288
9.1.3 忘记用户 295
9.1.4 两个小问题 296
9.2 “记住我”复选框 300
9.3 测试“记住我”功能 305
9.3.1 测试“记住我”复选框 305
9.3.2 测试“记住”分支 309
9.4 小结 312
第10章 更新、显示和删除用户 314
10.1 更新用户 314
10.1.1 编辑表单 314
10.1.2 编辑失败 320
10.1.3 编辑失败的测试 322
10.1.4 编辑成功(使用TDD) 323
10.2 权限系统 326
10.2.1 必须先登录 327
10.2.2 用户只能编辑自己的资料 331
10.2.3 友好的转向 335
10.3 列出所有用户 338
10.3.1 用户列表 339
10.3.2 示例用户 343
10.3.3 分页 345
10.3.4 用户列表页面的测试 348
10.3.5 使用局部视图重构 350
10.4 删除用户 351
10.4.1 管理员 352
10.4.2 destroy动作 355
10.4.3 删除用户的测试 357
10.5 小结 360
第11章 激活账户 362
11.1 Account Activations资源 363
11.1.1 AccountActivations控制器 363
11.1.2 AccountActivations数据模型 364
11.2 账户激活邮件 368
11.2.1 邮件程序模板 368
11.2.2 预览邮件 372
11.2.3 测试电子邮件 375
11.2.4 更新Users控制器的create动作 377
11.3 激活账户 380
11.3.1 通用的authenticated?方法 380
11.3.2 编写激活账户的edit动作 383
11.3.3 测试和重构 386
11.4 在生产环境中发送邮件 391
11.5 小结 394
第12章 重设密码 395
12.1 Password Resets资源 397
12.1.1 PasswordResets控制器 397
12.1.2 请求重设密码 399
12.1.3 PasswordResets控制器的create动作 402
12.2 密码重设邮件 404
12.2.1 密码重设邮件程序和模板 404
12.2.2 测试电子邮件 409
12.3 重设密码 410
12.3.1 PasswordResets控制器的edit动作 410
12.3.2 更新密码 412
12.3.3 测试密码重设功能 417
12.4 在生产环境中发送邮件(再谈) 421
12.5 小结 423
12.6 证明超时比较算式 423
第13章 用户的微博 425
13.1 Micropost模型 425
13.1.1 基本模型 425
13.1.2 Micropost模型的数据验证 427
13.1.3 User模型和Micropost模型之间的关联 430
13.1.4 改进Micropost模型 433
13.2 显示微博 436
13.2.1 渲染微博 437
13.2.2 示例微博 440
13.2.3 测试资料页面中的微博 445
13.3 微博相关的操作 447
13.3.1 访问限制 448
13.3.2 创建微博 450
13.3.3 动态流原型 457
13.3.4 删除微博 462
13.3.5 微博的测试 465
13.4 微博中的图像 468
13.4.1 基本的图像上传功能 469
13.4.2 验证图像 474
13.4.3 调整图像尺寸 476
13.4.4 在生产环境中上传图像 478
13.5 小结 481
第14章 关注用户 484
14.1 Relationship模型 487
14.1.1 数据模型带来的问题(以及解决方法) 487
14.1.2 User模型和Relationship模型之间的关联 490
14.1.3 关系验证 492
14.1.4 我关注的用户 493
14.1.5 关注我的人 496
14.2 关注用户的Web界面 498
14.2.1 示例关注数据 498
14.2.2 数量统计和关注表单 499
14.2.3 我关注的用户列表页面和关注我的用户列表页面 507
14.2.4 关注按钮的常规实现方式 514
14.2.5 关注按钮的Ajax实现方式 517
14.2.6 关注功能的测试 520
14.3 动态流 522
14.3.1 目的和策略 522
14.3.2 初步实现动态流 524
14.3.3 子查询 526
14.4 小结 530
14.4.1 后续学习资源 530
14.4.2 本章所学 531
· · · · · · (收起)
读后感
用户评价
《Ruby on Rails 教程(第4版)》给我带来的不仅仅是技术的学习,更多的是一种思维方式的启迪。它让我明白,在 Web 开发中,不仅仅是写代码,更重要的是如何思考问题,如何组织代码,以及如何优雅地解决问题。我特别欣赏书中在介绍一些更高级的特性时,会花时间去解释其背后的设计理念。例如,在讲解 Rails 的路由系统时,它不仅展示了如何配置路由,还深入分析了为什么 Rails 采用 RESTful 的设计原则,以及这种设计原则如何带来代码的简洁和可维护性。这种对“为什么”的深入探究,让我能够跳出“如何做”的层面,去理解更深层次的设计思想。而且,书中在讲解过程中,还会穿插一些关于 Web 开发最佳实践的讨论,比如如何提高代码的可读性、如何进行有效的测试、如何保证应用的安全性等等。这些内容,对于一个刚刚踏入 Web 开发领域的开发者来说,是非常宝贵的财富。它帮助我建立了一个更加全面和系统的 Web 开发观。这本书不是简单地教你使用一个框架,而是教你如何成为一个更好的 Web 开发者。
对于我这种已经有一定编程基础,但对 Rails 还不熟悉的开发者来说,《Ruby on Rails 教程(第4版)》提供了一个极佳的学习路径。它没有把我当成完全的零基础小白,而是能够快速切入到 Rails 的核心概念。我喜欢它在讲解过程中,总会引用一些现实世界中的场景来类比,让抽象的技术概念变得更加具体易懂。举个例子,在解释 Active Record 的 ORM(对象关系映射)特性时,它会将数据库中的表和行比作现实中的“图书目录”和“每一本书”,而 Ruby 对象就相当于“图书的详细信息卡片”。这种形象的比喻,让我立刻就理解了 ORM 的核心思想,即如何在面向对象的语言和关系型数据库之间建立桥梁。而且,它在介绍各个功能模块时,总是会提供一些“最佳实践”的建议,这对于想要写出高质量代码的开发者来说,是非常宝贵的。比如,在讲解如何组织 Controller 和 Model 的代码时,它会强调单一职责原则,避免代码的过度耦合,这让我受益匪浅。这本书的价值在于,它不仅教会了你如何使用 Rails,更教会了你如何用一种更优雅、更高效的方式去开发。
这本书的结构设计非常合理,给我留下了深刻的印象。它并没有一开始就抛出一大堆复杂的概念,而是从最基础的 Ruby 语言特性开始,逐步引导读者进入 Rails 的世界。我尤其欣赏的是,它在介绍 Rails 的每个重要组件时,都会清晰地说明这个组件在整个 Web 开发流程中扮演的角色,以及它与其他组件之间的关系。比如,在讲解 Controller 的时候,它不仅解释了 Controller 的职责是接收用户请求、调用 Model 处理数据、选择 View 进行渲染,还通过生动的例子演示了不同的 Controller Action 如何对应不同的用户操作。这种系统性的讲解,让我对 Rails 的 MVC 架构有了非常清晰的认识,而不仅仅是停留在表面的记忆。而且,书中在引入新概念时,总是会先铺垫一些必要的背景知识,确保读者能够理解。例如,在讲解数据库时,它先介绍了一些 SQL 的基础知识,然后再讲解 Rails 如何与数据库进行交互。这种循序渐进的方式,大大降低了学习的门槛。我感觉自己就像是在搭乐高积木,每一步都有清晰的指导,最终能够搭建出一个完整的作品。这本书不仅仅是教授我技术,更重要的是教会了我如何去思考和构建一个 Web 应用。
阅读《Ruby on Rails 教程(第4版)》的过程,对我来说就像是在解谜。书中提供的每一个例子,每一个练习,都是一个等待我去探索和解决的谜题。它没有给我标准答案,而是提供给我足够的信息和工具,让我去自己寻找答案。我记得在学习如何实现用户上传图片功能时,我遇到了很多意想不到的问题,比如文件上传的大小限制、文件类型的校验、图片的存储路径等等。我不得不花费大量的时间去查阅文档、搜索社区,并尝试不同的解决方案。但正是这个过程,让我对 Rails 的文件处理机制有了非常深入的理解。当最终成功实现图片上传功能时,那种成就感是巨大的。这本书的魅力就在于,它鼓励我去犯错,去尝试,去从错误中学习。它让我明白,编程不是一蹴而就的,而是一个不断迭代和优化的过程。这种“在实践中学习”的模式,让我对 Rails 的掌握更加牢固,也培养了我面对复杂问题时的信心。
总的来说,《Ruby on Rails 教程(第4版)》这本书,给我的感觉是“麻雀虽小,五脏俱全”。它可能不像某些技术书籍那样厚重,但其内容的精炼和实用性,却让我感到惊喜。它能够用相对较少的篇幅,覆盖到 Ruby on Rails 开发中的核心内容。我最喜欢它在最后章节对一些进阶主题的简单介绍,比如部署、测试、以及一些高级的 Rails 模式。虽然这些内容不是深入讲解,但足以让我对这些主题有一个初步的了解,并知道在未来的学习中,应该往哪个方向深入。而且,它在讲解每个模块时,都会强调代码的可测试性和可维护性,这让我从一开始就养成了良好的编程习惯。这本书就像是一张地图,它为我指明了 Ruby on Rails 开发的广阔天地,让我知道在哪里可以找到我感兴趣的宝藏。我确信,这本书将是我在 Ruby on Rails 学习旅程中,一份珍贵的起点。
这本书给我最深刻的感受,就是它真的非常“实战”。我一直认为,学习编程最好的方式就是通过动手实践,而这本书恰恰做到了这一点。它不是那种理论讲完就结束的教材,而是通过一个贯穿始终的真实项目,带领读者一步步完成一个 Web 应用的开发。我至今还记得,在学习如何实现用户评论功能时,作者详细讲解了如何创建数据库表、如何处理表单提交、如何将评论保存到数据库,以及如何在页面上显示评论。这个过程让我体会到了从需求到实现的完整链条。而且,书中提供的练习题,也是我反复钻研的对象。这些题目往往会在课堂上讲解的知识点基础上,进行一些小小的拓展和变化,让我有机会去巩固和运用所学知识。当我对某个知识点感到困惑时,我就会尝试去解决相关的练习题,往往在解决问题的过程中,我就能豁然开朗。这本书就像是一个循循善诱的导师,它不会直接把答案喂给我,而是通过一系列的引导和挑战,让我自己去发现和理解。这种学习方式,让我对 Rails 的掌握更加牢固,也培养了我独立解决问题的能力。
说实话,我当初对“第4版”这个标签有些犹豫,担心它会不会太老旧。但当我真正阅读这本书之后,我发现我的担忧是多余的。书中虽然是基于 Rails 4 的版本,但其核心概念和开发模式,对于理解当前版本的 Rails 依然有着非常重要的指导意义。而且,作者在讲解过程中,也巧妙地提及了一些与新版本相关的变化和演进方向,这让我能够站在巨人的肩膀上,去展望未来的发展。我印象最深的是,它在讲解如何进行单元测试和集成测试时,提供了非常详细的步骤和示例。这让我明白,测试并不是一个可有可无的环节,而是保证代码质量和项目稳定性的关键。通过书中提供的测试代码,我学会了如何编写清晰、可维护的测试用例,这让我对自己的代码更加有信心。而且,书中还涉及了一些关于版本控制(Git)的使用,这对于任何一个现代软件开发项目来说,都是必不可少的技能。这本书的价值在于,它不仅仅聚焦于 Rails 框架本身,还将 Web 开发中的一些通用且重要的实践融入其中,让读者能够获得更全面的提升。
我不得不说,阅读《Ruby on Rails 教程(第4版)》的过程,对我来说更像是一次沉浸式的开发体验,而不是单纯的学习。它没有让我感觉到被海量的信息淹没,而是以一种非常巧妙的方式,将知识点融入到一个实际的项目构建过程中。我至今还记得,在学习如何处理用户注册和登录时,作者花了相当大的篇幅来讲解安全性方面的内容,比如如何防止 SQL 注入,如何安全地存储密码等等。这一点让我非常感动,因为很多初学者教程往往会忽略这些关键的安全细节,而这本书却从一开始就强调了安全的重要性,这让我受益匪浅。它不是简单地告诉你“怎么做”,而是告诉你“为什么要这么做”,并且解释了背后的原理。这种教学方式,让我不仅仅是机械地复制代码,而是真正理解了代码的意图和作用。当我在后续的项目中遇到类似的安全问题时,我能够立刻想到书中的教诲,并采取相应的措施。而且,书中提供的源代码和示例项目,也是我反复揣摩的对象。我经常会在本地运行示例项目,然后尝试修改代码,看看会发生什么。这种动手实践,让我对 Rails 的内部机制有了更深刻的理解。此外,这本书的语言风格也很亲切,没有太多生硬的技术术语,读起来就像是和一位经验丰富的开发者在交流。
这本书,嗯,怎么说呢?我当初买它的时候,是被它的名字“Ruby on Rails 教程(第4版)”吸引了。我一直对 Web 开发挺感兴趣的,而 Rails 这个框架在社区里好像一直有很高的呼声,感觉是那种“江湖地位”很高、很值得学习的技术。拿到手的时候,我翻了翻目录,感觉内容挺全面的,从最基础的 Ruby 语法开始讲起,然后一步步深入到 Rails 的 MVC 架构、数据库交互、表单处理、认证授权,甚至还包括了一些部署和测试的内容。我印象特别深刻的是,它在讲解过程中,不是那种枯燥的理论堆砌,而是通过一个完整的项目来贯穿始终。从零开始,一步步构建一个功能完整的 Web 应用,这让我感觉特别有成就感。尤其是当我跟着书里的例子,一点点把代码敲出来,看到浏览器里出现我期望的页面时,那种喜悦是无法言喻的。它让我明白,原来开发一个 Web 应用并没有想象中那么遥不可及。而且,作者在解释一些概念的时候,用了很多类比和图示,即使是初学者,也能比较容易理解。比如,讲解数据库迁移的时候,它把数据库比作一个不断演进的文件系统,每次迁移都是对这个文件系统的一次更新和记录,这样就很容易理解为什么需要迁移以及它解决了什么问题。总之,这本书给了我一个非常扎实的起点,让我对 Ruby on Rails 有了一个清晰的认识,并且培养了我独立解决问题的能力。
这本书的语言风格给我留下了非常好的印象。它没有采用那种生硬、枯燥的学术语言,而是用一种非常通俗易懂、甚至带点幽默的口吻来讲解技术。这让我感觉就像是在和一位经验丰富的朋友聊天,而不是在枯燥地背诵教科书。我特别欣赏作者在解释一些稍显复杂的概念时,会引用生活中的例子来类比。比如,在讲解数据库索引的原理时,它会把数据库想象成一本厚厚的字典,而索引就像是字典后面的“词条索引”,能够帮助我们快速找到我们想要查找的单词。这种形象的比喻,极大地降低了理解的难度。而且,书中还经常会提到一些开发者在实际工作中可能会遇到的坑,并给出如何避免这些坑的建议。这让我觉得,作者不仅仅是在传授技术,更是在分享他的经验和智慧。这本书让我感到,学习编程也可以是一件有趣的事情,而不是一件苦差事。
快速学习下ROR
the third time i read the book~so fucking smooth~
实操性极佳的一本rails入门书, 书中对于rails的一堆约定的来历有比较到位的解释, 而且随着手把手的操作, 你也能理解rails实现这堆约定的内部机理. 虽然随着rails的版本更新, 14章2.5节Ajax部分的代码已经过时, 但是其他绝大部分都还可以在Ruby2.4.1和Rails5.2.1上实践. 需要注意的一处是Faker的版本可能会导致依赖冲突, 我用最新版本的. 其他还有几处不严谨, 但总体来说不错, 打算再看一遍
the third time i read the book~so fucking smooth~
实操性极佳的一本rails入门书, 书中对于rails的一堆约定的来历有比较到位的解释, 而且随着手把手的操作, 你也能理解rails实现这堆约定的内部机理. 虽然随着rails的版本更新, 14章2.5节Ajax部分的代码已经过时, 但是其他绝大部分都还可以在Ruby2.4.1和Rails5.2.1上实践. 需要注意的一处是Faker的版本可能会导致依赖冲突, 我用最新版本的. 其他还有几处不严谨, 但总体来说不错, 打算再看一遍