Rails 2.0 循序渐进[译言翻译]

Rails 2.0 循序渐进

Rails 核心小组在12月7号发布了Ruby on Rails 2.0 。 在这个版本中包含了很多改变, 包括Rails生成脚手架代码的方式. 这个变化也许会给使用根据旧版本做成的教程的人带来困扰。我希望这个教程能帮助读者开始使用Rails 2.0,并能给Rails社区做出贡献。

这是教程的第一部分,包括如何建立一个Rails应用并在Rails 2.0下运行它。

教程的第一部分包括安装Rials并且使用Rails生成一个包括增删改查四个基本数据库功能的应用程序。接下来的部分包括用自己的代码替换view层和controler层自动生成的代码。教程第一部分的目的是帮助新手了解Rails 2.0带来的改变,并且试作和运行一个基本的应用。

事实已经证明Rails对于很多项目来说是绝佳的选择。

注: 如果你在参考一个根据旧版本Rails做成的教程,你最好安装一个旧版本的Rails来配合它。例如,Dave Thomas和David Heinemeier Hansson著的这本 《使用Rails进行敏捷开发》是基于Rails 1.2.x的。本教程稍后会介绍如何安装一个Rails的旧版本。

使用本教程你需要2.0版之后的Rails。

你需要在电脑安装MySQL。网上有介绍如何安装MySQL的方法, 本教程并不包括这部分内容。

安装Rails 2.0
安装Rails 2.0的方法和安装1.2.x版是一样的。基本步骤如下:

* 安装Ruby
* 下载并安装Ruby gems
* 使用gems安装rails

这个得到Rails的链接和这个Rails初步链接提供了最好的参考. 根据这两个链接的内容安装Rails。

在我的debian系统上,用如下命令安装Rails 2.0.

安装 Ruby:
切换到超级用户,使用debian package manager安装ruby
# apt-get install ruby irb ri rdoc build-essential

安装 Ruby gems:
然后 下载 Ruby gems, ruby的包管理软件,解压,切换到rubygems目录,运行setup.rb文件:
$ tar -xvzf rubygems-0.9.5.tgz
$ cd rubygems-0.9.5
$ su
# ruby ./setup.rb

使用 gems 安装 Rails:
gem package manager可以安装Rails以及其他。执行如下命令:
# gem install rails --include-dependencies
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you list
Successfully installed rake-0.7.3
Successfully installed activesupport-2.0.1
Successfully installed activerecord-2.0.1
Successfully installed actionpack-2.0.1
Successfully installed actionmailer-2.0.1
Successfully installed activeresource-2.0.1
Successfully installed rails-2.0.1
7 gems installed
Installing ri documentation for rake-0.7.3...
Installing ri documentation for activesupport-2.0.1...
Installing ri documentation for activerecord-2.0.1...
Installing ri documentation for actionpack-2.0.1...
Installing ri documentation for actionmailer-2.0.1...
Installing ri documentation for activeresource-2.0.1...
Installing RDoc documentation for rake-0.7.3...
Installing RDoc documentation for activesupport-2.0.1...
Installing RDoc documentation for activerecord-2.0.1...
Installing RDoc documentation for actionpack-2.0.1...
Installing RDoc documentation for actionmailer-2.0.1...
Installing RDoc documentation for activeresource-2.0.1...

在命令行检查Rails版本:
$ rails -v
Rails 2.0.1

如果安装的过程中遇到问题,请参考上文提到的链接或者去Rails论坛寻求帮助。

使用老版本
如果你在使用诸如《使用Rails进行敏捷开发》 这样的书,最好安装旧版本的Rails。使用如下命令:
# gem install --version=1.2.5 rails --include-dependencies
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you list
Successfully installed activerecord-1.15.5
Successfully installed actionpack-1.13.5
Successfully installed actionmailer-1.3.5
Successfully installed actionwebservice-1.2.5
Successfully installed rails-1.2.5
5 gems installed
Installing ri documentation for activerecord-1.15.5...
Installing ri documentation for actionpack-1.13.5...
...

$rails -v
Rails 1.2.5

升级旧版Rails
如果要升级旧版Rails到最新版本, 使用如下命令:
$ gem update rails –-include-dependencies

现在让我们看看如何用几个命令就做成一个Rails应用并运行它。

使用 Rails 2.0

起步
在Rails 2.0下做成一个工程的方法和以前相比几乎没有变化。本教程从做一个管理Mom and Pop's录像带店的清单开始。我们把这个项目称为 'exchange'。

创建一个目录来保存我们的工作,然后用'rails'这个命令创建exchange应用程序的骨架。当Rails创建程序的基本结构的时候,屏幕上会显示大量的信息。
$ mkdir work
$ cd work
work$ rails exchange
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create public/.htaccess
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/boot.rb
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/console
create script/destroy
create script/generate
create script/performance/benchmarker
create script/performance/profiler
create script/performance/request
create script/process/reaper
create script/process/spawner
create script/process/inspector
create script/runner
create script/server
create script/plugin
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/422.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log

Rails生成了一整套的程序框架。切换到新建的exchange目录,开始工作。
work$ cd exchange
exchange$ ls -p
app/ db/ lib/ public/ README test/ vendor/
config/ doc/ log/ Rakefile script/ tmp/

设定Model层和数据库表
这时候,很多web框架不得不用数据库命令和DDL来创建用来保存录像带信息的表。但是借助Rails中数据和程序的紧密联系,我们可以用Rails来创建和管理我们工程所要用到的表。这就是MVC的设计模式中管理数据的Model层。

Rails能自动生成exchange工程所用到的数据库和表。查看/exchange/config/database.yml文件,从中你会发现Rails用到的数据库结构。

你能看到存在不同的表,分别对应开发、测试、发布。这种区分有利于Rails工程的开发和维护。

和以往的Rails版本不同的是,Rails 2.0使用如下命令创建数据库:
exchange$ rake db:create:all
(in /home/sean01/work/exchange)
exchange$

启动web server
Rails内建了自己的web服务器,我们来启动它,看看目前为止我们所做的工作。要启动rails web服务器 WEBbrick,使用如下命令:
exchange$ ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-12-13 12:01:16] INFO WEBrick 1.3.1
[2007-12-13 12:01:16] INFO ruby 1.8.5 (2006-08-25) [i486-linux]
[2007-12-13 12:01:16] INFO WEBrick::HTTPServer#start: pid=3637 port=3000

打开你的浏览器,指向URL http://localhost:3000,你将看到这个画面:


点击 'About your application's environment' 链接,一段AJAX代码将列出你程序的明细。


注意,缺省的环境是开发环境而不是测试、发布环境。这正是我们开发阶段所需要的。

在WEBbrick server运行的终端安详CRL+C将停止server。

新旧对比
接下来几步将展示激动人心的新旧对比。旧版教程会用script/generate一个model然后用migrate文件规划数据库表的项目。然后你再script/generate一个controller、添加脚手架。这在Rails 2.0是行不通的。

在Rails 2.0中需要的步骤更少,但或许有点儿难以理解,因为如此少的命令完成了如此多的工作。首先从电影租赁表开始。

简单来说,影片至少应该有个名字、简介以及海报。其他方面比如发行日期、出租率等等可以稍后通过修改表来添加。接下来生成一个model来管理数据库中的表。

下面的命令将生成model、脚手架、和数据库迁移需要的脚本以及controller、helper和测试支持文件:

exchange$ ruby script/generate scaffold Movie title:string description:text one_sheet_url:string
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/movies
exists app/views/layouts/
exists test/functional/
exists test/unit/
create app/views/movies/index.html.erb
create app/views/movies/show.html.erb
create app/views/movies/new.html.erb
create app/views/movies/edit.html.erb
create app/views/layouts/movies.html.erb
create public/stylesheets/scaffold.css dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/movie.rb
create test/unit/movie_test.rb
create test/fixtures/movies.yml
create db/migrate
create db/migrate/001_create_movies.rb
create app/controllers/movies_controller.rb
create test/functional/movies_controller_test.rb
create app/helpers/movies_helper.rb
route map.resources :movies

生成Movies表
db/migrate/001_create_movies.rb将创建Movies表,现在看看这个文件:

这个文件将创建一个名为movies的表,和Movie model绑定。这是Rails的命名惯例。people表将匹配Person model; cars表将匹配Car model。你可以看到我们传给script/generate命令的参数在migration文件中以字段和类型出现。

以下命令将生成表:
exchange$ rake db:migrate
(in /home/sean01/work/exchange)
== 1 CreateMovies: migrating ==================================================
-- create_table(:movies)
-> 0.0040s
== 1 CreateMovies: migrated (0.0042s) =========================================

要看目前为止我们的工作成果,用如下命令启动WEBbrick服务器(如果你不曾用CRL+C停止服务的话):
/exchange$ ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-12-13 17:12:06] INFO WEBrick 1.3.1
[2007-12-13 17:12:06] INFO ruby 1.8.5 (2006-08-25) [i486-linux]
[2007-12-13 17:12:06] INFO WEBrick::HTTPServer#start: pid=4054 port=3000

把你的浏览器指向URL http://localhost:3000/movies,看看我们的成果。

看上去很空,那是因为我们还没有录像带呢。 点击'New Movie' 链接, 添加些录像带。

添加一个名字、简介、海报,然后点击Create。点击'Back'按钮 (不是浏览器的那个)返回,添加另外一个电影。

这仍然很简陋,不过想想看我们还一行代码都没有写呢!

Oh CRUD!
在数据库术语中CRUD可是好东西,它是Create, Read, Update和Delete的缩写,数据库的四个最基本功能。 exchange程序在没写一行代码的情况下就拥有了这些基本功能。它不优美也不花哨,但是它确实有效。

到目前为止我们都做了什么?

* 安装 Rails
#gem install rails --include-dependencies
* 用rails命令创建了一个程序
$rails exchange
* 用rake命令创建数据库
$ rake db:create:all
* 用script/generate命令生成脚手架
$ ruby script/generate scaffold Movie title:string description:text one_sheet_url:string
* 用migration文件生成数据库表
$ rake db:migrate
* 用script/server命令启动server
$ ruby script/server
* 启动浏览器输入编辑数据
http://localhost:3000/movies
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值