本書榮獲Jolt技術(shù)圖書大獎。本書以講解“購書網(wǎng)站”案例為主線,逐步介紹Rails的內(nèi)置功能。全書分為3部分,第一部分介紹Rails的安裝、應(yīng)用程序驗證、Rails框架的體系結(jié)構(gòu),以及Ruby語言知識;第二部分用迭代方式構(gòu)建應(yīng)用程序,然后依據(jù)敏捷開發(fā)模式開展測試,最后用Capistrano完成部署;第三部分補充日常實用的開發(fā)知識。本書既有直觀的示例,又有深入的分析,同時涵蓋了Web開發(fā)各方面的知識,堪稱一部內(nèi)容全面而又深入淺出的佳作。第5版增加了關(guān)于Rails 5和Ruby 2.2新特性和最佳實踐的內(nèi)容。
如果說Rails是世界上開發(fā)效率高的Web開發(fā)框架,恐怕沒有人會有異議。Rails以其“約定勝于配置”的先進(jìn)設(shè)計理念和對Ruby語言元編程能力的嫻熟應(yīng)用,創(chuàng)造了Web開發(fā)框架歷史上的一個奇跡。從開始流行至今,Rails一直都是其他語言開發(fā)框架的模仿對象,例如PHP語言的Yii框架、Python語言的Django框架,等等。一直被模仿,從未被超越,這句話放在Rails身上真是恰如其分。
從商業(yè)應(yīng)用的角度看,互聯(lián)網(wǎng)從興起到現(xiàn)在已經(jīng)經(jīng)歷了Web 1.0、Web 2.0和移動互聯(lián)網(wǎng)時代,正在進(jìn)入人工智能和物聯(lián)網(wǎng)時代。而移動互聯(lián)網(wǎng)本身經(jīng)歷了2G、3G和4G時代,即將進(jìn)入5G時代。未來,移動互聯(lián)網(wǎng)仍將是重要的基礎(chǔ)設(shè)施和商業(yè)競爭的主戰(zhàn)場,因此Web應(yīng)用不僅不會走向夕陽薄暮,反而會迎來一個更加蓬勃的春天。在這樣一個背景下,Rails將繼續(xù)成為程序員手中的利器,幫助創(chuàng)業(yè)者和商業(yè)公司在時代潮頭橫刀立馬。
作為Ruby China社區(qū)(https://ruby-china.org)的用戶,譯者一直為國內(nèi)Ruby社區(qū)融洽的氛圍和高質(zhì)量的討論內(nèi)容而感到慶幸不已,同時也想盡自己的綿薄之力回饋社區(qū)。對于Rails程序員來說,入門和提高都不是一件易事,這不僅因為Ruby語言表達(dá)能力極強、靈活多變,更因為Rails本身功能完備、包羅萬象?梢哉f,Rails開發(fā)就像演奏音樂,既可以行云流水,也可以凝滯生澀,強者以一當(dāng)十、游刃有余,弱者步履蹣跚、漏洞百出,兩者高下立判。因此,學(xué)習(xí)Rails尤其需要名師和秘籍,不僅要領(lǐng)新手入門、扶上馬、送一程,更要能幫助開發(fā)者掌握要領(lǐng)、理清思路、拓寬視野,為繼續(xù)修行提高指明方向、注入動力。《Rails 5敏捷開發(fā)(第5版)》正是這樣一本絕世好書,入門提高兼宜。我們也為能有機會翻譯這樣一本好書而不勝欣喜。
在策劃和翻譯本書的過程中,華中科技大學(xué)出版社的徐定翔老師和Ruby China社區(qū)的各位同仁給予了熱情鼓勵和實際幫助,在此一并表示感謝。同時也要感謝家人的理解和包容,正是在你們的支持下,長達(dá)數(shù)月的翻譯過程才能終走向勝利的長征,讓一切的艱辛和付出都有了回報。
本書承蒙大疆Ruby技術(shù)團隊的審校,他們?yōu)楸緯g稿提供了眾多寶貴意見,特此感謝!當(dāng)然,書中若仍有不當(dāng)之處,所有責(zé)任都在譯者自身。
希望譯者的工作成果能夠為大家學(xué)習(xí)Rails助一臂之力。后,以一句結(jié)語和大家共勉:學(xué)習(xí)Rails,永遠(yuǎn)在路上!
譯者
2017年9月10日
第一部分 新手入門 1
第1章 安裝Rails 3
1.1 在Cloud9上安裝Rails 4
1.2 在虛擬機上安裝Rails 6
1.3 在Windows上安裝Rails 8
1.4 在Mac OSX上安裝Rails 11
1.5 在Linux上安裝Rails 12
1.6 Rails版本的選擇 14
1.7 設(shè)置開發(fā)環(huán)境 14
1.8 Rails和數(shù)據(jù)庫 18
1.9 本章所學(xué) 19
第2章 牛刀小試 21
2.1 新建Rails應(yīng)用 21
2.2 Hello, Rails! 24
2.3 把頁面連接起來 30
2.4 如果發(fā)生錯誤 33
2.5 本章所學(xué) 36
2.6 練習(xí)題 36
2.7 清理工作 37
第3章 Rails應(yīng)用的架構(gòu) 39
3.1 模型、視圖和控制器 39
3.2 Rails對模型的支持 42
3.3 Action Pack:視圖和控制器 44
第4章 Ruby簡介 47
4.1 Ruby是面向?qū)ο蟮恼Z言 47
4.2 數(shù)據(jù)類型 49
4.3 控制邏輯 53
4.4 組織結(jié)構(gòu) 56
4.5 對象的序列化 59
4.6 綜合應(yīng)用 59
4.7 Ruby慣用法 60
第二部分 構(gòu)建一個應(yīng)用 63
第5章 Depot應(yīng)用 65
5.1 增量開發(fā) 65
5.2 Depot應(yīng)用的功能 66
5.3 開始編寫代碼 70
第6章 任務(wù)A:創(chuàng)建應(yīng)用 71
6.1 迭代A1:實現(xiàn)產(chǎn)品維護功能 71
6.2 迭代A2:美化產(chǎn)品列表 78
6.3 本章所學(xué) 84
6.4 練習(xí)題 85
第7章 任務(wù)B:驗證和單元測試 87
7.1 迭代B1:驗證! 87
7.2 迭代B2:模型的單元測試 92
7.3 本章所學(xué) 99
7.4 練習(xí)題 100
第8章 任務(wù)C:實現(xiàn)產(chǎn)品目錄頁面 101
8.1 迭代C1:創(chuàng)建產(chǎn)品目錄列表 101
8.2 迭代C2:添加頁面布局 105
8.3 迭代C3:通過輔助方法格式化價格 110
8.4 迭代C4:控制器的功能測試 111
8.5 迭代C5:緩存局部結(jié)果 113
8.6 本章所學(xué) 115
8.7 練習(xí)題 116
第9章 任務(wù)D:創(chuàng)建購物車 117
9.1 迭代D1:查找購物車 117
9.2 迭代D2:把產(chǎn)品放入購物車 118
9.3 迭代D3:添加按鈕 121
9.4 本章所學(xué) 126
9.5 練習(xí)題 127
第10章 任務(wù)E:更智能的購物車 129
10.1 迭代E1:創(chuàng)建更智能的購物車 129
10.2 迭代E2:錯誤處理 135
10.3 迭代E3:完成購物車的開發(fā) 139
10.4 本章所學(xué) 143
10.5 練習(xí)題 143
第11章 任務(wù)F:添加少量Ajax代碼 145
11.1 迭代F1:移動購物車 146
11.2 迭代F2:創(chuàng)建基于Ajax的購物車 153
11.3 迭代F3:突出顯示更改 157
11.4 迭代F4:隱藏空購物車 160
11.5 迭代F5:通過Action Cable廣播更改 164
11.6 本章所學(xué) 167
11.7 練習(xí)題 168
第12章 任務(wù)G:去結(jié)算! 169
12.1 迭代G1:獲取訂單 169
12.2 迭代G2:Atom訂閱源 183
12.3 本章所學(xué) 186
12.4 練習(xí)題 186
第13章 任務(wù)H:發(fā)送電子郵件 189
13.1 迭代H1:發(fā)送確認(rèn)郵件 189
13.2 迭代H2:應(yīng)用的集成測試 196
13.3 本章所學(xué) 201
13.4 練習(xí)題 201
第14章 任務(wù)I:用戶登錄 203
14.1 迭代I1:添加用戶 203
14.2 迭代I2:用戶身份驗證 207
14.3 迭代I3:訪問限制 213
14.4 迭代I4:在側(cè)邊欄中添加幾個管理鏈接 215
14.5 本章所學(xué) 219
14.6 練習(xí)題 219
第15章 任務(wù)J:國際化 221
15.1 迭代J1:區(qū)域的選擇 222
15.2 迭代J2:在線商店店面的翻譯 226
15.3 迭代J3:結(jié)算頁面的翻譯 233
15.4 迭代J4:添加區(qū)域設(shè)置選擇器 239
15.5 本章所學(xué) 241
15.6 練習(xí)題 241
第16章 任務(wù)K:部署上線 243
16.1 迭代K1:使用Phusion Passenger和MySQL部署 245
16.2 迭代K2:通過Capistrano遠(yuǎn)程部署 252
16.3 迭代K3:檢查部署后的應(yīng)用 258
16.4 本章所學(xué) 260
16.5 練習(xí)題 261
第17章 Depot應(yīng)用開發(fā)回顧 263
17.1 Rails中的概念 263
17.2 記錄已完成的工作 266
第三部分 深入探索Rails 267
第18章 Rails內(nèi)部概覽 269
18.1 目錄結(jié)構(gòu) 269
18.2 命名約定 277
18.3 本章所學(xué) 280
第19章 Active Record 281
19.1 定義數(shù)據(jù) 281
19.2 識別和關(guān)聯(lián)記錄 286
19.3 創(chuàng)建、讀取、更新和刪除(CRUD) 290
19.4 參與監(jiān)控過程 304
19.5 事務(wù) 310
19.6 本章所學(xué) 314
第20章 Action Dispatch和Action Controller 315
20.1 把請求分派給控制器 316
20.2 處理請求 325
20.3 跨請求的對象和操作 337
20.4 本章所學(xué) 345
第21章 Action View 347
21.1 使用模板 347
21.2 生成表單 349
21.3 處理表單 352
21.4 在Rails應(yīng)用中上傳文件 354
21.5 使用輔助方法 357
21.6 利用布局和局部模板減少維護投入 364
21.7 本章所學(xué) 372
第22章 遷移 373
22.1 創(chuàng)建和運行遷移 373
22.2 遷移詳解 376
22.3 管理表 380
22.4 高級遷移技術(shù) 385
22.5 遷移的問題 388
22.6 在遷移外部處理模式 389
22.7 本章所學(xué) 390
第23章 非瀏覽器應(yīng)用 391
23.1 使用Active Record開發(fā)獨立應(yīng)用 391
23.2 使用Active Support編寫庫函數(shù) 392
23.3 本章所學(xué) 397
第24章 Rails的依賴 399
24.1 使用Builder生成XML 399
24.2 使用ERB生成HTML 401
24.3 使用Bundler管理依賴 403
24.4 使用Rack與Web服務(wù)器交互 406
24.5 使用Rake自動執(zhí)行任務(wù) 409
24.6 Rails依賴概覽 411
24.7 本章所學(xué) 414
第25章 Rails插件 415
25.1 使用Active Merchant處理信用卡 415
25.2 使用Haml美化標(biāo)記 417
25.3 分頁 420
25.4 本章所學(xué) 422
25.5 在RailsPlugins.org中尋找更多插件 422
第26章 長路漫漫 425
附錄A 參考書目 427
索引 429