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 框架應該繼續在組件易用性上多做文章,兩者的趨勢是融合。