第二章 Rails 工作原理
一、Rails 的 MVC 框架设计实现概览
MVC 阶段 | Rails 子库 | 目的 |
模型 | ActiveRecord | 在关系数据库表和操作数据库记录的Ruby程序代码之间提供接口和绑定。Ruby方法名自动从数据库表的字段名产生,等等 |
视图 | ActionView | 一个基于嵌入式Ruby(ERb)的系统,用于定义服务于数据表示的表示模板。对Rails应用的每一次Web连接都导致显示一个视图 |
控制器 | ActionController | 在ActiveRecord(数据库接口)和ActionView(表示引擎)之间的数据中介。ActionController提供功能设施,处理和组织来自数据库和Web表单输入的数据,然后它将这些数据递交给ActionView,ActionView将这些数据插入模板并显示 |
二、图解 Ruby 和 Rails 框架
三、全程开发 Rails 应用,音乐店应用——R4Rmusic(PS:完整版攻略)
Google Code 下载:http://kerryas.googlecode.com/files/R4Rmusic1.rar
1. 生成音乐店的数据库表 SQL 命令
CREATE DATABASE r4rmusic1;
USE r4rmusic1;
DROP TABLE IF EXISTS works;
DROP TABLE IF EXISTS editions;
DROP TABLE IF EXISTS composers;
CREATE TABLE works (
);
CREATE TABLE editions (
);
CREATE TABLE composers (
);
2. 产生音乐店示例库存数据的 SQL 命令
INSERT INTO composers
INSERT INTO composers
INSERT INTO works
INSERT INTO works
INSERT INTO editions
INSERT INTO editions
INSERT INTO editions
INSERT INTO editions
INSERT INTO editions
3. 创建 R4Rmusic1 项目(数据库基于Mysql)
F:\ruby_project>rails -d mysql R4Rmusic1
F:\ruby_project>cd R4Rmusic1
4. 初始设置及测试
(1)配置数据库文件 config/database.yml
development:
(2)启动 WEBrick 应用服务器
F:\ruby_project\R4Rmusic1>ruby script\server
=> Booting WEBrick
=> Rails 2.3.3 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-08-16 14:40:31] INFO
[2009-08-16 14:40:31] INFO
[2009-08-16 14:40:31] INFO
(3)测试服务
访问:http://localhost:3000/
点击:About your application’s environment 测试是否列出应用的环境列表,如果是则服务正确,如果出错需要访问log/development.log 查找原因。
5. 创建 Rails 模型文件
F:\ruby_project\R4Rmusic1>ruby script/generate model work
F:\ruby_project\R4Rmusic1>ruby script/generate model edition
F:\ruby_project\R4Rmusic1>ruby script/generate model composer
执行后会在 app/model 目录下生成这三个模型文件:work.rb, edition.rb, composer.rb
将 work.rb 修改如下:
class Work < ActiveRecord::Base
end
将 edition.rb 修改如下:
class Edition < ActiveRecord::Base
end
将 composer.rb 修改如下:
class Composer < ActiveRecord::Base
end
6. 创建访问主界面
(1)创建主界面视图及控制器
F:\ruby_project\R4Rmusic1>ruby script/generate controller main welcome
(2)将 app\controllers\main_controller.rb 修改如下(编写控制器):
class MainController < ApplicationController
end
(3)将 app\views\main\welcome.html.erb 修改如下(编写视图):
<p>Click on a composer's name
to see all of that composer's works.</p>
<ul>
</ul>
(4)R4RMusic基本布局(在app\views\layouts 中创建base.html.erb)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<h1 class="banner">The R4R Music Store</h1>
<hr/>
<p>Copyright © 2006, R4RMusic</p>
</body>
</html>
(5)将默认布局加入到 app\controllers\ application_controller.rb 中
class ApplicationController < ActionController::Base
end
(6)设置应用程序入口文件,在 config/routes.rb 中加入配置:
map.connect '', :controller => "main", :action => "welcome"
(7)删除public/index.html(Rails 应用默认入口),重启 WEBrick 测试。
7. 创建作品、版本及作曲者的控制器
F:\ruby_project\R4Rmusic1>ruby script/generate controller work show
F:\ruby_project\R4Rmusic1>ruby script/generate controller edition show
F:\ruby_project\R4Rmusic1>ruby script/generate controller composer show
修改 app\controllers\work_controller.rb
def show
end
修改 app\controllers\edition_controller.rb
def show
end
修改 app\controllers\composer_controller.rb
def show
end
8. 创建作品、版本及作曲者的视图
(1)将 app\views\work\show.html.erb
<p>Available editions of
</p>
<table>
</table>
(2)将 app\views\edition\show.html.erb
<% @page_title =
<p>Details of <%= @edition.work.title %>
(<%= @edition.description %>),
by
<%= "#{@edition.work.composer.first_name}
<table border="1">
</table>
(3)将 app\views\composer\show.html.erb
<% @page_title =
<p>Click on any work to see all available editions of that work.</p>
<ul>
</ul>
8. 最后,重新启动 WEBrick 服务器,第一个 R4RMusic 应用完成。