学无所长,一事无成
分类: Python/Ruby
2012-08-07 12:57:18
参考文章:Agile Web Development with Rails, 4th Edition
Ruby on Rails 学习-第一章:环境准备
零、环境准备:
1、使用taobao镜像
2、安装 javascript runtime (因为 rails3 内部支持 coffeescript ,所以需要 javascript runtime)
execjs 支持以下 javascript runtime:
我们这里安装 therubyracer
# libv8 同 therubyracer 有冲突,所以要 uninstall
一、安装 rails 3.2.7
二、生成 Rails API 文档
行这一步时会报错,始终说找不到 javascript runtime,实际上我们已经安装了。解决办法如下:
vi dummy_app/ Gemfile ,添加如下:
然后运行如下就ok 了。
rake doc:rails 这一步完成后,在 doc/api 会生成完整的 Rails API 文档。可以讲 这个目录丢到你的桌面上,以备参考。其他的东西可以删除了。文档查看,可以打开 doc/api/index.html 文件。
Rails 的文档我们也可以在线查看:。
Ruby on Rails 学习-第二章:实战
2.1 创建一个 App
运行如下指令
现在我们只关注一个目录: app/ # => 我们的应用程序会放在这里
现在我们启动服务
成功了,我们会得到一个缺省的页面。
我们还可以指定 web server 。这里 webrick 是一个纯 ruby 语言写的 web server。
2.2 Hello, Rails! p38
让我们添加点内容。
我们需要关注的第一个源文件是:app/controllers/say_controller.rb,内容如下:
输入: 看下效果 ....
Rails and Request URLs
Our First Action p40
注:MVC 对应三个目录都在 app 下。
修改 say controller 对应的的视图文件:app/view/say/hello.html.erb。
将视图修改为动态的。我们这里会添加一个动态显示时间。
我们的方法将 Ruby 代码嵌入 hello.html.erb 模版文件中。Rails 会通过 erb 系统调用处理 .erb 文件中嵌入的 Ruby 代码。
ERb 是一个过滤器,在 Rails 安装时自动安装,它会将输出信息进行转换。<%= ... %>间的内容将作为 Ruby 代码处理,返回结果会转化成 String。
添加时间到控制器
以上代码比较丑陋,我们最好把数据处理放到 controller 中。
controller 修改如下:
view 文件修改如下:
以上修改的好处:做到 MVC 的分离,程序更灵活,逻辑更清晰。
目前为止我们已完成
2.3 Linking Pages Together
让我们在 view 中加入 link 链接。
这种方法可用,但很笨拙。如果我们的 web server 做了迁移,目录发生了变化,那就需要手工逐个调整了。Rails 提供了很多 helper methods ,我们可以使用 link_to:
link_to 的第一个参数:超文本链接显示的文本。
第二个参数指示 Rails 产生一个指向 goodbye action 的链接,这里就是 /say/goodbye。
2.4 What We Just Did
接下来,我们创建一个更为大型的应用
Playtime
1、自己尝试一下
2、在页面中显示当前文件目录
controller 文件中某 action 添加:
对应的 view 文件添加:
Ruby on Rails 学习-第三章:Rails Applications 的架构
3.1 Models, Views, and Controllers
1979 年,Trygve Reenskaug 提出了一种新的软件架构,将应用拆分为三个部分:models, views, 和 controllers。
models 经常是代表数据模型。
views 是用户接口,一般指的是用户看到的应用界面,它一般是一种数据的展现方式。
controllers 总体控制程序,接受外部请求,同 model 交互,最后将 views 展现给用户。
以上就是我们所熟知的 MVC 架构。这种架构最初用于 GUI 程序设计, Ruby on Rails 同样采用这种架构。
3.2 Rails Model Support
传统上我们将数据存放在关系型数据库中,而我们的 Ruby on Rails 是面向对象的。两者很难匹配,所以我们需要 ORM(对象关系映射)
Object-Relational Mapping -- 对象关系映射
ORM 库将数据库中的一张表映射成一个类。如 orders 表,对应 Order 类。每条记录对应该类的一个实例对象。对于每个字段有 set、get等方法。
另外,ORM 封装的类具有类一级的方法,对应数据库表一级的操作。比如,我们根据 id 查找 order ,那么我们需要使用类方法进行查找,代码如下:
order = Order.find(1)
puts "Customer #{order.customer_id}, amount=$#{order.amount}"
有时返回的不止一条记录,返回的是一个对象集合。
Order.where(:name => 'dave').each do |order|
puts order.amount
end
一个对象 object 对应一条记录,这个 object 有很多实例方法可以操作该记录。比如 save 方法:
Order.where(:name => 'dave').each do |order|
order.pay_type = "Purchase order"
order.save
end
总结,ORM 将表映射成类,记录映射成对象,字段映射成对象的属性。类方法进行表级操作,实例方法用于记录级操作。
Active Record
Active Record 就是一个 Rails 支持的 ORM。它遵循如下ORM原则:表映射成类,记录映射成对象,字段映射成对象属性。它同其他 ORM 的主要差别在于配置方式。举例如下:
require 'active_record'
class Order < ActiveRecord::Base
end
order = Order.find(1)
order.pay_type = "Purchase order"
order.save
Active Record 是 Rails MVC 体系中 model 部分的坚强基石。
3.3 Action Pack: The View and Controller p54
仔细考量 view 和 controller ,会发现它们两者关系非常紧密。controller 提供数据给 view ,同时接受 view 界面上操作产生的各种事件。所以在 Rails 中将 controller 和 view 捆绑到一起,称之为 Action Pack。尽管如此,这两部分的代码也是截然分开,非常清晰的。
View Support
动态内容由模版产生。Rails 中常用的有三种:
1、嵌入式 Ruby (ERb),类似于 PHP 或 JSP,尽管很灵活方便,但一般认为这有点背离 MVC 的精神。因为此种方式可能会将 model 或 controller 的处理逻辑添加进来。适度使用还是没有问题,不能滥用。
2、XML Builder 利用 Ruby 代码构架 XML 文档。在 p408 讨论 xml.builder 模版。
3、RJS 视图。允许你在服务端创建 javascript 代码片度,然后再浏览器执行。这用于创建动态的 Ajax 接口是非常棒的,P145 页讨论。
And the Controller!
1、负责将外部的 url 请求 routing 到内部的 action。
2、管理 caching,可以大幅提高性能。
3、管理 helper modules 。可以不用侵入代码,即可扩展 view 模板。
4、管理 session。提供用户同应用的持续**互。
深入学习 Rails 前,我们还是温习一下 Ruby 语言吧。
Ruby on Rails 学习-第四章:Ruby 语言介绍 p56