Rails项目实战剖析与技巧大全
Rails项目实战剖析与技巧大全
Rails项目实战剖析与技巧大全全书内容包括:如何基于Windows、Mac OS X和Linux建立Rails;如何配合MySQL and SQLite数据库使用Rails;如何合并最新插件、引擎和Ruby Gems到应用中,以节省开发时间;如何使用Yahoo YUI轻松实现一致的应用风格;如何将PHP站点翻新为Rails;如何使用Ajax技术为应用增色;如何使用最先进的Rails功能,如REST和Active Resource。
版权信息
书 名: Rails项目实战剖析与技巧大全
作 者:(美国)(EldonAlameda)阿兰梅达
出版社: 电子工业出版社
出版时间: 2008
ISBN: 9787121068775
开本: 16
定价: 59.80 元
内容简介
如果你是一个已经领略过RubyonRails威力的开发人员,又想进一步提升Rails技能,本书对你而言将是无价之宝。本书的重点并不在于该框架的应用基础,而是聚焦于带你感受众多真实案例的开发实践,包括博客、个人备忘录、日历、一个由PHP移植为Rails的网站实例等。每一应用实例均来自最佳实践,包括类型、功能、多种Rails插件应用、Rails引擎和RubyGem。同时,也探讨最先进的Rails功能,诸如新的REST执行和ActiveResource。作为必要的回顾,本书在直接进入项目实践之前,先向读者介绍了一个理想开发环境的建立。
本书适合程序开发人员参考学习,还可以作为高等院校相关专业师生的参考书。
作者简介
EldonAlameda是一名Web开发人员,现居住于气候寒冷的堪萨斯州。他现在为堪萨斯市一家刚起步的小型科技公司开发RubyonRails应用。在这之前,他在当地的广告公司、SprintPCS及IBM等多家公司从事过软件开发工作。
编辑推荐
尊敬的读者: 实践出真知。因此我相信学习Rails最好的办法,就是用其来创建各种各样的应用程序,只有这样才能完全掌握这项技术。 在本书中,假设读者已经具备了使用Ruby on Rails框架的基础知识,已经了解其众多令人激动的功能并希望能够从中获益。而现在,相信你正需要通过创建一些不同类型的Web应用程序,来获得这些功能的第一手开发经验。这也是本书的主要出发点,通过带领读者创建多个实际Rails应用项目,使大家能够掌握最实用的开发经验。其中涉及到丰富而完整的核心Rails特性。 在深入探讨这些内容的同时,我们还将完成一系列的项目。包括创建含有外部API的一个简单博客,以REST方式构建、由图表进行展现的一个锻炼情况跟踪记录程序,以及通过添加高级的JavaScript接口将已有的一个PHP网站转换为Rails实现。除了以上这些,在最后一个项目中,我们还将使用最新版本的Rails及Active Resource来创建一个应用程序,同时介绍一些Rails 2.0中的变动和新增功能。 在本书中,每个项目都提供了必要的信息和工具。使得读者在解决实际问题时可以轻易上手,并且在每个项目最后还包括一些额外的创意和练习。读者可以按照自己的需要对这些应用程序进行扩展和改进。
目录
第1部分
必要的准备工作(请不要跳过这一部分)
第1章搭建开发环境3
1.1安装Ruby和Rails3
1.1.1在Linux上安装Ruby4
1.1.2在Windows上安装Rails4
1.1.3在MacOSX上安装Rails5
1.2安装数据库6
1.2.1安装SQLite7
1.2.2安装SQLiteRubygem7
1.3代码编辑工具8
1.3.1Windows8
1.3.2Linux11
1.3.3Mac11
1.3.4建议13
1.4安装Web服务器13
1.4.1WEBrick13
1.4.2Mongrel14
1.5最后给读者的建议16
1.5.1使用版本控制系统16
1.5.2使用Capistrano实现自动部署17
1.6本章小结19
第2章创建Rails应用程序21
2.1创建步骤21
2.1.1步骤1:创建项目21
2.1.2步骤2:配置数据库25
2.1.3步骤3:测试应用程序26
2.1.4步骤4:安装样式表(StyleSheet)27
2.1.5步骤5:将应用程序与Rails绑定27
2.2本章小结28
第2部分
MonkeyTasks日常任务管理
第3章实现用户注册与认证管理31
3.1创建页面布局31
3.1.1初始化布局32
3.1.2第一个视图模板35
3.2添加用户注册与认证管理36
3.2.1配置ActsasAuthenticated39
3.2.2实现用户注册功能41
3.2.3发送邮件通知43
3.3本章小结49
第4章实现日常待办事项管理51
4.1创建Task模型类51
4.2创建Task控制器53
4.3添加任务表单55
4.4更好的日期选择控件56
4.5Schedule模型59
4.6Todo模型60
4.7实现任务列表功能62
4.8实现日程表功能64
4.8.1安排任务65
4.8.2显示日程表66
4.9使用局部模板(Partial)68
4.10使用Ajax71
4.10.1可排序元素71
4.10.2RJS72
4.11本章小结74
第5章完善MonkeyTasks77
5.1添加验证功能(Validation)77
5.2任务修改功能77
5.3添加日历(Calendar)77
5.4查看以前的任务78
5.5记录每个任务的预计时间78
5.6显示任务完成率78
5.7开发iPhone接口79
5.8优化数据库查询79
5.9将代码移到模型类中80
5.10绑定ChronicGem81
5.11本章小结81
第3部分
Exercisr应用程序
第6章开发基于REST的应用程序85
6.1基于REST的开发85
6.1.1什么是REST85
6.1.2REST的价值86
6.2第一个资源87
6.2.1REST工具87
6.2.2创建Exercise资源91
6.3添加基于REST的认证功能96
6.4改进外观显示102
6.5创建新的用户103
6.6完成Exercise资源106
6.6.1创建模型间关联关系106
6.6.2修改Exercise控制器的作用域107
6.6.3运动(Exercise)视图109
6.7Workout资源112
6.7.1Workout模型及其关联关系112
6.7.2Workout控制器112
6.7.3修改视图114
6.8记录锻炼过程中的数据116
6.8.1创建Activity模型类及其关联关系117
6.8.2修改Activity路由119
6.8.3修改Activity控制器120
6.8.4修改Activity视图模板122
6.8.5修改Workout控制器中的show方法124
6.8.6改进添加Activity的表单125
6.9跟踪锻炼目标127
6.9.1修改模型类127
6.9.2创建嵌套路由128
6.9.3配置控制器128
6.9.4配置视图132
6.9.5记录上一次结果136
6.9.6探索REST接口136
6.10本章小结139
第7章为应用程序添加图形功能141
7.1第二阶段开发141
7.2Rails中的图表141
7.2.1CSS图表141
7.2.2Sparklines144
7.2.3Gruff图表147
7.2.4Scruffy153
7.2.5Ziya155
7.3本章小结162
第8章完善Exercisr163
8.1为接口添加RJS163
8.2创建日历来显示锻炼的时间163
8.3对图表进行缓存164
8.4使首页也符合REST要求164
8.5开发更多的图表164
8.6调整模型类和控制器中的业务逻辑164
8.7开发网络交流功能165
8.8本章小结165
第4部分
简单的博客程序
第9章使用Typo创建博客程序169
9.1Typo介绍169
9.1.1Typo的特点170
9.1.2安装Typo170
9.1.3激活TypoBlog171
9.2Rails的启动过程173
9.3理解Typo177
9.4Rails如何对请求进行路由181
9.5确定设计方案187
9.6使用Typo188
9.6.1管理Blog190
9.6.2添加内容191
9.7定制Typo192
9.7.1管理主题192
9.7.2关于主题193
9.7.3创建自定义主题193
9.7.4创建侧边栏(Sidebar)组件198
9.7.5自定义侧边栏组件199
9.8本章小结200
第10章创建一个简单的博客引擎(Engine)201
10.1我们将创建什么样的引擎201
10.2创建第一组模型类202
10.3创建API205
10.3.1MetaWeblog服务API207
10.3.2支持BloggerAPI209
10.3.3支持图像222
10.4创建博客的展现界面228
10.4.1创建基本的布局228
10.4.2修改Application控制器230
10.4.3创建首页230
10.4.4查看某篇日志234
10.5本章小结238
第11章完善博客程序239
11.1开发BloggerAPI239
11.2使用Mephisto来创建Blog程序239
11.3定制Typo239
11.4在方法中实现认证功能240
11.5添加缓存(Caching)240
11.6添加评论和Akismet垃圾广告过滤功能240
11.7添加Web后台管理241
11.8针对分类的RSS文件(Feed)241
11.9实现标签(Tag)功能241
11.10本章小结242
第5部分
使用缓存构建一个Web漫画站点
第12章使用页面缓存构建基本的系统245
12.1基本的管理系统246
12.1.1上传漫画247
12.1.2Comic模型248
12.1.3修改路由251
12.1.4修改脚手架(Scaffolding)252
12.1.5创建一个漫画254
12.1.6简单的认证系统256
12.1.7限制访问258
12.2向公众展现漫画259
12.3页面缓存261
12.3.1开启缓存功能262
12.3.2清除缓存266
12.4本章小结268
第13章实现高级缓存269
13.1Members控制器270
13.2限制其他用户的访问271
13.3缓存付费成员的页面273
13.4使缓存页面过期275
13.5片段缓存276
13.5.1自定义布局277
13.5.2清除片段缓存282
13.6本章小结282
第14章完善Web漫画站点285
14.1添加一个博客(Blog)285
14.2集成一个论坛(Forum)285
14.3通过日期来选择漫画286
14.4完善身份认证系统286
14.5本章小结286
第6部分
教会社区网站
第15章用户和档案管理291 15.1安装Restful认证291
15.2我们即将要创建什么294
15.2.1创建共享布局295
15.2.2Avatar模型296
15.2.3用户的详细信息模型298
15.2.4创建示例用户300
15.2.5Profile控制器301
15.3修改用户的详细信息和头像304
15.3.1修改档案信息305
15.3.2查看档案308
15.4添加博客功能309
15.5在用户页面中添加博客摘要317
15.6添加相册功能319
15.7添加照片321
15.8相册与照片控制器323
15.8.1创建一个新的相册324
15.8.2查看指定相册325
15.8.3显示所有用户的相册326
15.9本章小结328
第16章完善社区站点329
16.1创建社区主页329
16.1.1创建默认路由329
16.1.2index页面330
16.1.3创建首页334
16.2添加用户目录336
16.2.1创建字母索引336
16.2.2创建路由337
16.2.3添加directory方法337
16.2.4修改视图模板338
16.3添加导航339
16.3.1上部导航339
16.3.2页脚导航340
16.4添加评论340
16.4.1安装acts_as_commentable插件341
16.4.2显示评论342
16.4.3添加评论345
16.5本章小结351
第17章完善教会社区应用353
17.1创建用户导入或注册功能353
17.2使用SWFupload批量上传照片353
17.3添加好友列表功能354
17.4改进主页355
17.5清理部分Ruby代码355
17.6将代码移到局部模板(Partial)中355
17.7添加缓存功能357
17.8本章小结357
第7部分
GamingTrend网站
第18章PHP网站的遗留问题361
18.1简要介绍当前系统362
18.1.1当前系统的代码363
18.1.2遗留系统存在的问题365
18.2建立我们的应用程序366
18.3使用Ext-JS建立更好的界面368
18.3.1BorderLayout369
18.3.2表格(Grid)370
18.3.3对话框(Dialog)371
18.3.4消息框(MessageBox)372
18.4在Rails应用程序中安装Ext-JS373
18.5自动化Ext-JS安装374
18.6本章小结378
第19章转化游戏记录379
19.1对数据库进行迁移转化379
19.2Games表381
19.3创建Game模型385
19.4创建Developer和Publisher模型387
19.5创建Genres模型391
19.6配置路由393
19.7创建控制器393
19.8创建视图396
19.8.1标准布局396
19.8.2使用ExtBorderLayout改进布局页面399
19.9定义工作流(Workflow)402
19.9.1显示当前资源列表402
19.9.2创建一个新资源402
19.9.3删除指定资源403
19.9.4修改指定资源403
19.10建立开发商页面403
19.10.1显示开发商列表403
19.10.2修改开发商记录408
19.10.3改进表格410
19.10.4在工具栏上增加按钮417
19.10.5删除开发商记录418
19.10.6新建开发商记录421
19.11将工作流抽象为辅助方法423
19.12创建Show/Edit模板433
19.13游戏435
19.13.1处理选择列表框440
19.13.2提供所见即所得(WYSIWYG)功能442
19.14查看游戏截图446
19.15本章小结452
第20章新闻管理功能453
20.1修改数据库453
20.2创建新闻模型455
20.3创建控制器457
20.4创建列表视图458
20.4.1重定义index方法458
20.4.2创建index视图458
20.4.3修改表格460
20.5捕获创建中的错误信息471
20.6新闻编辑页面472
20.6.1编辑新闻472
20.6.2激活(Activate)邮件474
20.6.3为新闻建立关联关系476
20.7本章小结483
第21章完善游戏网站485
21.1创建自己的生成器(Generator)485
21.2添加登录功能485
21.3在新闻中关联发行商、开发商和游戏机型487
21.4创建一个游戏机型常量487
21.5增加包装图片和游戏截图的上传功能487
21.6支持游戏评论488
21.7支持较长内容488
21.8添加ActsasParanoid插件488
21.9将逻辑移到模型中489
21.10本章小结489
第8部分
使用EdgeRails(Rails2.0)集成REST应用程序
第22章Highrise的简要介绍493
22.1注册一个Highrise账户493
22.2创建联系人495
22.3创建任务496
22.4Highrise的更多功能496
22.5本章小结497
第23章集成Highrise的RESTAPI499
23.1浏览API499
23.2使用RESTAPI501
23.3新建EdgeRails项目502
23.3.1获得Rails的Edge版本503
23.3.2创建EdgeRails应用程序503
23.4测试我们的连接505
23.5本章小结507
第24章创建预约程序509
24.1我们要创建什么样的程序509
24.2设计布局草图509
24.2.1安装Ext510
24.2.2使用Yahoo地图510
24.2.3获取应用程序ID511
24.2.4布局脚本511
24.3Home控制器512
24.4添加任务列表516
24.5显示待办任务518
24.5.1创建变量519
24.5.2建立数据源520
24.5.3在地图上显示客户525
24.6管理备忘记录(Notes)527
24.6.1显示备忘信息528
24.6.2添加备忘信息528
24.6.3使用AJAX更新备忘信息529
24.7本章小结531
第25章完善Rails2.0应用程序533
25.1改进Highrise项目533
25.1.1缓存客户数据533
25.1.2创建约会533
25.1.3修改客户信息534
25.2EdgeRails2.0的新特性534
25.2.1SexyMigrations534
25.2.2自动生成迁移代码534
25.2.3数据库命令535
25.2.4查看路由535
25.2.5查询缓存535
25.2.6改善REST风格的路由536
25.2.7从框架中移除的功能536
25.3本章小结537
……
书摘
搭建开发环境
Miracle Max:你催促一个制造奇迹的人,只能得到一个糟糕的奇迹。
——摘自William Goldman编剧的影片《公主新娘(The Princess Bride)》,1987年
为了能够运行本书中的项目,首先需要保证在机器上已经安装了如下的软件。Ruby和Rails:因为Rails是一个针对于Ruby的框架,并且其自身也是使用Ruby编写的,所以首先需要安装Ruby。对于本书来说,Ruby的版本应该在1.8.4以上。稍后我会讲解一些如何快速并且正确安装Ruby及Rails的方法。
数据库(Database):Rails框架是针对于创建基于数据库驱动(Database—driven)的Web应用程序。因此如果没有连接数据库的话,这个框架很可能无法启动。稍后会讨论开发中经常会使用的几种数据库类型。
代码编辑器(Code Editor):虽然从Rails的开发理论上来说,只要使用文本编辑器(可以创建和修改文本文件)就足够了,但是由于在实际中可能会牵扯到大量的文件,所以我们在后面会介绍一些高级技巧,来帮助读者提高开发的效率。
Web服务器:再好的机器也需要借助Web Server才能运行Rails程序。幸运的是,现在已经有几种非常优秀的、基于Ruby实现的服务器可以供我们选择。
安装Ruby和Rail
因为考虑到本书的大部分读者可能已经阅读过一些入门的Rails书籍,所以我也不打算花费太多的时问来讲解如何安装Rails。但是,又考虑到有些读者的确需要了解这方面的内容,所以我想至少还是应该为他们指明一个正确的方向,以免有读者在这个问题上无谓地浪费精力和时间。因此在这个部分中,我会从一个更高层次的角度来介绍如何在Linux、Windows和Mac OSX上安装Rails。
如果读者想参考一本入门级的Rails书籍,那么最好的选择是《Agile Web Development with Rails》(Thomas,Dave et al. Pragmatic Programmers,2006)。
……