windows版本ruby下载路径:
http://rubyinstaller.rubyforge.org/

gem 命令包含很多子命令和相应的选项,比如:
gem -h/--help – 显示 rubygem 的帮助
gem -v/--version – 显示rubygem 的版本号
gem list –local – 用子命令 list 列出本地安装的 gems

安装rails:
gem install rails –remote
这条命令显式地从远程服务器上安装 rails ,你也可以运行 gem install rails 来安装, gem 会判断本地是否安装了rails ,由此来决定是否从远程安装 rails.

一般来说,安装 rails 需要的包有 rake (这是类似 java ant 的 build 程序), activerecord(rails 依赖的 orm 工具,也就是 MVC中的Model 模块),actionpack (对应的 controller 模块)。 你可能会问那么相应的 view 模块怎么没有安装,因为 view 模块已经在默认的 ruby 安装中包含了,就是 eruby, 它的作用就是完成对模板文件 .rhtml 的解释。

创建空的 rails 网页应用程序骨架:
D:\railsdoc>rails mybook
控制台输出:
create
create app/apis
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
create log
create public/images
create public/javascripts
create public/stylesheets
create script
create test/fixtures
create test/functional
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create Rakefile
create README
create CHANGELOG
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/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/console
create script/console_sandbox
create script/destroy
create script/generate
create script/server
create script/runner
create script/benchmarker
create script/profiler
create script/breakpointer
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/javascripts/prototype.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log

Rails 开发的方式是: 由 rails 来生成默认的应用程序骨架,你所做的工作就是在默认目录结构中编辑文件增加应用程序逻辑就可以了。

启动webrick 服务器:
D:\railsdoc\mybook>ruby script\server

运行程序:
打开浏览器 ,输入网址http://127.0.0.1:3000/

Rails 开发工作的大部分集中在创建和编辑 apps 目录下的文件

Apps 目录下包含四个主要目录,它们分别是:
1:Controllers 目录存放 rails 应用中相应的 controller 类,controller 类处理来自用户的 web 请求。
2:views 目录存放相应的模板文件,模板文件填充数据后,转换为 html 格式传递给用户的浏览器。
3:models目录存放数据模型类,模型类封装了数据库中的数据。很多框架在数据模型层都做的比较复杂,用过 rails 后,你会发现它非常容易使用。
4:helpers 目录存放了简化 Controllers, models, views 使用的帮助类。

运行 ruby script\generate controller MyTest
D:\railsdoc\mybook\app\controllers 目录中将生成一个包含 MyTestController 类定义骨架的名为 my_test_controller.rb 的文件

这里需要做一些解释,在运行 ruby script\generate controller MyTest 的时候, rails 做了一些默认的假设。 MyTest 对应的 controller 文件是 my_test_controller.rb, 文件中控制器类名是 MyTestController,而 url 映射是 /My_Test/ .

在编辑完 controller 后,重新刷新页面,就可以使程序生效。对于编译型的 java 语言来说,不重新编译,重新启动服务器是无法做到这点的

新建数据库表 books
id int(11) 主键
title varchar(100)
description text
buydate date

告诉 rails 如何找到数据库信息,打开 D:\railsdoc\mybook\config 目录,编辑 database.yml 配置文件

如何将ruby对象保存到 yaml 文件中.
参考文档: http://www.ruby-doc.org/core/classes/YAML.html
require ‘yaml’
tree = { :name => ‘ruby’,
:uses => [‘script’,’web’,’testing’,’etc’]
}
File.open(“tree.yaml”,”w”) {|f| YAML.dump(tree,f)}

如何在 ruby 程序中读取 yaml 文件。
require ‘yaml’
tree = YAML.load(File.open(“tree.yaml”)
tree[:uses][1]
输出结果: “web”

下面就是个例子:
conf/config.yaml 文件内容如下:
host: 127.0.0.1
prefs:
username: mulder
password: trustno1
filename: xfiles
我们可以在ruby 中这样使用它
require ‘yaml’
config = YAML.load(File.open(“conf/config.yaml”))
config[“host”] -- 输出结果 “127.0.0.1”
config[“prefs”][“password”] -- 输出结果 “trustno1”

由于重新定义了数据库配置,需要重新启动 webrick 服务器才能让 rails 找到数据库配置信息。

用rails生成Model类Book的骨架文件book.rb,如下:
运行 ruby script\generate model book
book.rb:
class Book < ActiveRecord::Base

在这里 Rails 将数据库中的books 表映射到 Book 类。 这里 Rails 再次使用了习惯约定,那就是数据库表以复数形式命名,而与之对应的 Model 类,使用单数形式。这里 rails 非常智能,它理解英文的复数规则

运行 ruby script\generate controller book 生成 controller 骨架文件 book_controller.rb。

class BookController < ApplicationController
scaffold :book
end

scaffold :book – 这句是你惟一需要写的代码,它生成了数据库表对应的 CRUD 操作,而且令人激动的是它生成了对应的视图模板文件。

我们重新编辑 book_controller.rb 文件
class BookController < ApplicationController
scaffold :book
def list
@books = Book.find_all
end
end

这里我们需要自己写一个 list.rhtml
代码如下:
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<table border="1">
<tr>
<td width="80%"><p align="center"><i><b>book</b></i></td>
<td width="20%"><p align="center"><i><b>Date</b></i></td>
</tr>
<% @books.each do |book| %>
<tr>
<td><%= link_to book.title, :action => "show", :id => book.id %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
</table>
<p><%= link_to "Create new book", :action => "new" %></p>
</body>
</html>

创建 categories 数据表
id int(11)
name varchar(50)

ruby script\generate controller Category
category_controller.rb:
class CategoryController < ApplicationController
scaffold :category
end

ruby script\generate model Category

为了让 books 数据表包含类别字段,我们需要新增加一个 category_id字段,字段定义为 int 型与 categories 表的 id 字段类型相同。

book.rb 修改如下:
class Book < ActiveRecord::Base
belongs_to :category
end
这行代码告诉 Rails, 一本书属于一个类别

category.rb 修改如下:
class Category < ActiveRecord::Base
has_many :books
end
这行代码告诉 Rails, 一个类别可以包含很多本书。

现在我们从新定义 edit 函数,来覆盖它的 scalffold 版本。
编辑 book_controller.rb 文件
class BookController < ApplicationController
scaffold :book
def list
@books = Book.find_all
end
def edit
@book = Book.find(@params["id"])
@categories = Category.find_all
end
end

新建一个 edit.rhtml:
<html>
<head>
<title>Edit book</title>
</head>
<body>
<h1>Edit book</h1>
<form action="../update" method="POST">
<input id="book_id" name="book[id]" size="30"
type="hidden" value="<%= @book.id %>" />
<p><b>Title</b><br>
<input id="book_title" name="book[title]" size="30"
type="text" value="<%= @book.title %>" />
</p>
<p><b>Description</b><br>
<input id="book_description" name="book[description]"
size="30" type="text"
value="<%= @book.description %>" />
</p>
<p><b>Category:</b><br>
<select name="book[category_id]">
<% @categories.each do |category| %>
<option value="<%= category.id %>"
<%= ' selected' if category.id == @book.category.id %>>
<%= category.name %>
</option>
<% end %>
</select></p>
<input type="submit" value="Update" />
</form>
<a href="/book/show/<%= @book.id %>">
Show
</a> |
<a href="/book/list">
Back
</a>
</body>
</html>

编辑list.rhtml
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<table border="1">
<tr>
<td width="80%"><p align="center"><i><b>书名</b></i></td>
<td width="20%"><p align="center"><i><b>类别</b></i></td>
<td width="20%"><p align="center"><i><b>购买日期</b></i></td>
</tr>
<% @books.each do |book| %>
<tr>
<td><%= link_to book.title, :action => "show", :id => book.id %></td>
<td><%= book.category.name %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
</table>
<p><%= link_to "Create new book", :action => "new" %></p>
</body>
</html>

rails的缺点:
1:Rails 毕竟还没有大型项目的成功案例.
2:Rails 是最近刚刚出来的框架,还不够成熟。
3:ruby 缺少组件的架构。
我觉得未来应用程序框架应该具备两个特点,那就是:“易用性”和“组件”。从现在的情形看,Rails 具备了“易用性”的特点,而大多数 Java 框架具备了“组件”的特点。我觉得:“好的框架的复杂性应该被组件封装在“黑箱”中,而“易用性”应该体现在组件的使用上”。所以 Rails 的未来应该向组件上发展,而 Java 框架应该继续在组件易用性上多做文章,两者的趋势是融合。