Ruby、Rails分享老宋老宋老宋老宋@2011-12-12@2011-12-12@2011-12-12@2011-12-12
Me
Ruby迷
Blog:Blog:Blog:Blog: http://rubyer.meGithub:Github:Github:Github: https://github.com/camelsongEmail:Email:Email:Email: [email protected]
语言趋势语言趋势语言趋势语言趋势
2011201120112011年11112222月 http://www.tiobe.com很不靠谱的排名
http://trends.builtwith.com/2011-10-24
如果还有人争论Ruby/Rails和Python哪个更适合Web开发,这个数据可以参考
http://trends.builtwith.com/2011-10-24
J2EE在企业级市场独占鳌头,现在盛产码农
PHP是中小网站最爱,我是草根我光荣 http://trends.builtwith.com/2011-10-24
http://trends.builtwith.com/2011-10-24
看来喜欢Ruby on Rails的人还是有的
基点虽小,但我们看中的是未来 http://trends.builtwith.com/2011-10-24
Python为啥下降这么快,难道是没给领导送礼 http://trends.builtwith.com/2011-10-24
Ruby介绍
Rails介绍
10分钟写博客
摘要摘要摘要摘要
Who Who Who Who is is is is on on on on Ruby on Rails?Ruby on Rails?Ruby on Rails?Ruby on Rails?
编程语言 开发框架
区别区别区别区别
http://www.ruby-lang.org
RubyRubyRubyRuby
Ruby 由日本人日本人日本人日本人 松本行弘(松本行弘(松本行弘(松本行弘(MatzMatzMatzMatz))))1995199519951995年发布
人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机器着想。他们认为:器着想。他们认为:器着想。他们认为:器着想。他们认为: ““““这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。机器就会怎样怎样怎样。机器就会怎样怎样怎样。机器就会怎样怎样怎样。”””” 实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他们是仆人。们是仆人。们是仆人。们是仆人。
---- Matz Matz Matz Matz
SimplicitySimplicitySimplicitySimplicity
打印Hello world
RubyRubyRubyRuby就像超人,只穿内裤。就像超人,只穿内裤。就像超人,只穿内裤。就像超人,只穿内裤。
代码少到不能再少,代码少到不能再少,代码少到不能再少,代码少到不能再少,
简单到不能再简单。简单到不能再简单。简单到不能再简单。简单到不能再简单。
下面分别用下面分别用下面分别用下面分别用RubyRubyRubyRuby和和和和JavaJavaJavaJava实现相同功能实现相同功能实现相同功能实现相同功能
做一个比较。做一个比较。做一个比较。做一个比较。
Java
Ruby 不用写代码不用写代码不用写代码不用写代码
一段空程序
Ruby
Java
调用一个方法
Ruby
Java
逆转字符串
还敢说讨厌Ruby吗?
打印5次Hello world
完全完全完全完全面向面向面向面向对象对象对象对象
全都是对象,甚至包括数字和空
NaturalNaturalNaturalNatural
输出两天前的日期
一段Rspec测试代码
DynamicDynamicDynamicDynamic
给数字添加一个方法
让你疯狂的代码
Ruby的三个动态特性
• Duck Typing• Method Missing• 元编程
Duck TypingDuck TypingDuck TypingDuck Typing
最给力的代码
最给力的代码
Method Missing
Method Missing
Method Missing
Method Missing
Java
Ruby
元编程
Java
Ruby
闭包
Java使用内部类模拟闭包
打开连接关闭连接
处理迭代 处理异常
迭代
管理资源
“跨平台”
真正跨平台JJJJRRRRubyubyubyubyIronRubyIronRubyIronRubyIronRubyMacRubyMacRubyMacRubyMacRubyRubyJSRubyJSRubyJSRubyJSRubotoRubotoRubotoRubotoRubyRubyRubyRuby EnterpriseEnterpriseEnterpriseEnterprise EditionEditionEditionEdition
JavaJavaJavaJavaCCCC####ObjectObjectObjectObject----CCCCJSJSJSJSAndroidAndroidAndroidAndroid
JRuby 示例
Ruby is...• 跨平台跨平台跨平台跨平台
• 自动垃圾回收自动垃圾回收自动垃圾回收自动垃圾回收
• 解释性执行解释性执行解释性执行解释性执行
• 完全面向对象完全面向对象完全面向对象完全面向对象
• 动态动态动态动态
• 支持闭包支持闭包支持闭包支持闭包
• 容易测试容易测试容易测试容易测试
By DHH(David Heinemeier Hansson)@2003
我不认为Rails应该向外部世界屈服,恰恰相反,Rails正在有力地让外部世界向我们屈服。
by DHH
Convention Over Configuration约定优于配置
DRY(Don’t Repeat Yourself)
不要重复自己
REST(Representational State Transfer)
具象状态传输
Rails三原则
约定约定约定约定>>>>配置配置配置配置
1.添加连接库
2.配置连接字符串
3.打开连接
4.新建查找方法
5.调用查找方法
6.修改name7.保存记录
8.关闭连接
把Users表中name=ys的改为youshang
Rails访问数据库示例
比较下比较下比较下比较下JavaJavaJavaJava的的的的ORMORMORMORM框架框架框架框架HibernateHibernateHibernateHibernate和和和和RailsRailsRailsRails的的的的ORMORMORMORM框架框架框架框架ActiveActiveActiveActive RecordRecordRecordRecord。。。。你才知道你才知道你才知道你才知道HibernateHibernateHibernateHibernate真的弱爆了!真的弱爆了!真的弱爆了!真的弱爆了!
Hibernate 官方示例
ModelModelModelModel对象模型:OrderOrderOrderOrder
JavaJavaJavaJava 数据库映射数据库映射数据库映射数据库映射:::: OrderOrderOrderOrder
还有Service层、Dao层。
各层接口和实现类...
RailsRailsRailsRails出场了出场了出场了出场了
Rails中到处充满着约定3种环境约定(开发、生产、测试)单复数约定MVC瘦控制器,胖模型...
DDDDon'ton'ton'ton'tRRRRepeatepeatepeatepeatYYYYourselfourselfourselfourself
DRYGeneratorPartialsPlugins...
RESTRESTRESTREST
万物皆为URL
一切操作均是对一切操作均是对一切操作均是对一切操作均是对URLURLURLURL操作操作操作操作
CCCCreatereatereatereateRRRReadeadeadeadUUUUpdatepdatepdatepdateDDDDeleteeleteeleteelete
RESTRESTRESTRESTfulfulfulful操作符
PostPostPostPostGetGetGetGetPutPutPutPutDeleteDeleteDeleteDelete
HTTPHTTPHTTPHTTP动词
CCCCreatereatereatereateRRRReadeadeadeadUUUUpdatepdatepdatepdateDDDDeleteeleteeleteelete
RailsRailsRailsRails方法
showshowshowshow
editeditediteditupdateupdateupdateupdate
destroydestroydestroydestroy
indexindexindexindex
newnewnewnewcreatecreatecreatecreate
RESTRESTRESTRESTfulfulfulful操作符
操作 HTTPHTTPHTTPHTTP请求
URLURLURLURL Rails Rails Rails Rails 对应ActionActionActionAction
查看列表 GetGetGetGet http://my/posts indexindexindexindex
查看id=2的帖子 GetGetGetGet http://my/posts/2 showshowshowshow
新建贴子 GetGetGetGet http://my/posts/new newnewnewnew
保存帖子 PostPostPostPost http://my/posts createcreatecreatecreate
修改id=2的帖子 GetGetGetGet http://my/posts/2 editediteditedit
保存修改 UpdateUpdateUpdateUpdate http://my/posts/2 updateupdateupdateupdate
删除id=2的帖子 DeleteDeleteDeleteDelete http://my/posts/2 DestroyDestroyDestroyDestroy
More RailsAgile DevelopmentTDD(Test Driven Development)BDDGeneratorsLive on the edge
10101010分钟写博客分钟写博客分钟写博客分钟写博客
其实只要其实只要其实只要其实只要5555分钟分钟分钟分钟1.rails new blog2.cd blog3.rails g scaffold Post title:string
content:text4.rails server
现在就可以访问http://127.0.0.1:3000/posts
博客已经写好了。
My Blog-webMy Blog-webMy Blog-webMy Blog-web
My Blog-mobileMy Blog-mobileMy Blog-mobileMy Blog-mobile
Q&AQ&AQ&AQ&Ahttp://rubyer.mehttp://rubyer.mehttp://rubyer.mehttp://rubyer.me