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