- 前言
近期在java社區(qū)中一種新的腳本語言ruby,及用ruby開發(fā)的一個wab框架 rails也熱鬧了起來.引起了不少的java開發(fā)人員的關注. 本人平時還是很少接觸腳本語言方面東東,看到相關的評論 例如: "習慣約定優(yōu)于配置" -- 那樣就用象java那樣麻煩且繁雜地配置N多XML "‘一站式‘面向用戶的簡單易用的框架" "Ruby 語言- 真正的面向對象腳本語言" "Ruby 語法更簡單,靈活" "聲稱:Rails 的開發(fā)效率是 java 開發(fā)的 10 倍" 等等,再得到老大的強烈推薦,不禁也開始接觸了一下. 聲明:本人接觸三天,看過一些簡單的介紹以及一些文檔,實操過一個小項目,并未深入了解,這一文章并非語言及框架使用教程,只是一個感性認識,其中代碼或許并非最簡潔,如要更深入學習ruby,rails,請參考相關的官方站點以及其語法參數(shù)書.
- Ruby 與 Rails
[什么是RUBY ?] Ruby 是由日本人松本行弘發(fā)明的一種面向對象的腳本語言. 聲稱,更快,更通俗易懂的面向對象的語言,本人接觸這段時間,感覺到關于面向對象的確做得不錯. 一些特點: 1、一切都是對象,例如: 數(shù)據(jù)類型轉換提供如 to_ary,to_i,to_s 等方法,
@i = "2".to_i //字符串轉數(shù)值類型
puts @i+1
不再象java中的諸如: Integer.parseInt() String.valueOf() 那樣難看與及難以理解 Time.now.strftime(fmt) Time.now對象通過strftime格式化日期類型 再如koalant在它那本ruby on rails實踐中說到 -166.abs 可以直接取其-166絕對值 ……………… 2、代碼塊非強制用{} ,無需 ; 作分行標識; 3、語法靈活,一種可以功能可多種實現(xiàn),隨個人愛好; 4、語法簡潔等,做一個應用只要用到幾行代碼,這也是腳本語言的優(yōu)勢所在 更詳細可參考 http://www./ 以及下面提供的些文檔資料. [什么是Rails ?] RAILS是用RUBY開發(fā)的一個web框架. 實現(xiàn)一站式開發(fā). http://www./ 有比較詳細的介紹.
Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups
聲稱用更少的代碼實現(xiàn)web applications。 此框架主要包括三部分 Active Record 一個ORM實現(xiàn) Action Pack View 以及controller Action Mailer 應該是關于mail方面的東西
[一些資料] [1] koalant寫的Ruby on Rails實踐 ,通俗易懂,介紹了ruby on onrails中的一些基礎的東東 [2] IBM中文文章: Ruby on Rails 和 J2EE:兩者能否共存? [3] Agile Web Development with Rails(以一個案例詳細介紹了ruby on rails) 下載請見:http://www./398528.html [4] Ajax on Rails http://www./pub/a/onlamp/2005/06/09/rails_ajax.html [5] Programming Ruby http://www./book/index.html
- 快速安裝
1、下載 到目前為止最新版本是Ruby 1.8.2,可以到http:///frs/?group_id=167&release_id=2049 下載 One-Click Installer - for Windows 2、點擊下載exe文件一直NEXT 安裝就OK [ 說明:本人安裝在C:\ruby\目錄] 3、使用 rubygems 來安裝 rails CMD進行命令行窗口,通過網(wǎng)絡進行遠程安裝 rails
說明如果發(fā)現(xiàn)gem,rails命令等用不了,可能是環(huán)境變量未設置好, 可自行設置指向你的 安裝目錄/bin 4、運行服務器
 C:\> ruby c:\myrails\script\server => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2005-08-11 20:29:56] INFO WEBrick 1.3.1 [2005-08-11 20:29:56] INFO ruby 1.8.2 (2004-12-25) [i386-mswin32] [2005-08-11 20:29:56] INFO WEBrick::HTTPServer#start: pid=4072 port=3000 127.0.0.1 - - [11/Aug/2005:20:30:08 China Standard Time] "GET / HTTP/1.1" 200 32 34 - -> / 127.0.0.1 - - [11/Aug/2005:20:30:09 China Standard Time] "GET / HTTP/1.1" 304 0 - -> / 127.0.0.1 - - [11/Aug/2005:20:30:24 China Standard Time] "GET / HTTP/1.1" 304 0 - -> /
http://127.0.0.1:3000 恭喜你,如果看到 Congratulations, you‘ve put Ruby on Rails!頁面 則表示安裝成功!!!!
5、 學習一個Ruby的語法 ruby 以rb為后綴的文件. hello.rb
@a = "hello world!"
puts @a
C:\ruby\bin>ruby hello.rb hello world! 其它可參考語言書學習.
- 我的訂餐系統(tǒng)
1、功能,包括四類基本管理,主要是新增,修改,查看,刪除(CURD) 四種操作 餐廳管理(shop) 菜式管理(good) 人員管理(human) 訂單管理(order) 2、首頁效果截圖
由于本人偷懶,樣式借用了jsp wiki的,在此聲明一下: ) [主界面,使用frame,左邊為主要功能菜單,右邊為進行CURD操作提供界面操作]
![orderList[1].gif](http://pubimage.360doc.com/wz/default.gif)
[頁面結構如下所示]
![orderList[2].gif](http://pubimage.360doc.com/wz/default.gif)
- 員工管理
1、快速開發(fā),自動生成基本文件結構目錄及文件 執(zhí)行命令,自動生成項目所需要的文件及其文件結構,幾秒種架設好訂餐系統(tǒng)框架!!!
C:\myrails>rails c:\myMealOrder
說明:rails 一直貫穿的思想說是"習慣約定優(yōu)于配置",所以,文件結構都是它定義的,我們只要將相應 文件放到其定義好的目錄下就行了。 例如:controller 應該放到其 webapp/app/controllers 下,本文目錄為[C:\myMealOrder\app\controllers] model 應該放到其 webapp/app/model下,本文目錄為[C:\myMealOrder\app\model] views 應該放到其 webapp/app/view下,本文目錄為[C:\myMealOrder\app\views] 另外,根本目錄為webapp/public/ 你可以通過修改index.html來定義你自己的index頁面 2、啟動webrick 服務器測試 rails默認使用webrick服務器,官方網(wǎng)站了解其更多www. 執(zhí)行命令
C:\>ruby c:\myMealOrder\script\server
打開IE 瀏覽 :http://127.0.0.1:3000 看到Congratulations, you‘ve put Ruby on Rails!表示配置成功 3、建立數(shù)據(jù)庫以及進行配置 CREATE TABLE humen ( id int(11) NOT NULL auto_increment, code varchar(100) NOT NULL default ‘‘, mame varchar(100) NOT NULL default ‘‘, PRIMARY KEY (`id`) ) 說明,習慣約定,默認情況下主鍵名為id,表名為復數(shù)形式,具體操作我也有點糊涂, 例如本例子中的human model對應其數(shù)據(jù)表名為humen。這里我就略過了。具體資料可參考更詳細的資料。 配置,打開 C:/myMealOrder/config/database.yml 將其中參數(shù)設置正常就行了。 例如將 database: rails_development 設成你的數(shù)據(jù)名等
4、生成human 的 model,controller文件
ruby c:\myMealOrder\script\generate controller human
exists app/controllers/
exists app/helpers/
create app/views/human
exists test/functional/
create app/controllers/human_controller.rb
create test/functional/human_controller_test.rb
create app/helpers/human_helper.rb
ruby c:\myMealOrder\script\generate model human
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/human.rb
create test/unit/human_test.rb
create test/fixtures/humen.yml
4、快速實現(xiàn)CURD 打開app/controllers/human_controller.rb文件,修改為
class HumanController < ApplicationController
scaffold :human
end
說明: 簡單的一句 "scaffold :human" 就能對應生成human 的CURD操作及其頁面。 重啟服務,再次瀏覽 http://127.0.0.1:3000/human action包括: list(列表,列出所有human),new(新建human),show(顯示human),update(更新human),Destroy(物理刪除human),界面如下圖
   我們可以注意其URL http://127.0.0.1:3000/human/new http://127.0.0.1:3000/human/show/1 http://127.0.0.1:3000/human/edit/1 http://127.0.0.1:3000/human/destroy/2 rails也是MVC的模式, 1、瀏覽器發(fā)出請求; 2、后臺尋找(new/show/edit/destroy/etc) controller,調用相對應的方法,及view模板; 3、將結果返回給瀏覽者 或許你會認為,這一默認的view大多數(shù)情況下并不適合,或許需要自己設計view模板,也行,rails提供快捷的方法 方便用戶自己設計view模板,只要定義action并將同名view文件(rhtml后綴的文件)放到其webapp/app/views/目錄即可, 下面將會介紹到相關的操作。
- 餐廳及其菜式管理
餐廳(shop),菜色(good)按員工管理操作方法進行新建,在這里就略過了!! http://127.0.0.1:3000/shop http://127.0.0.1:3000/good
1、自己設計view 模板 例如在餐廳列表中我要實現(xiàn)自己的樣式,如下圖:
 具體操作, 新增加 myMealOrder\app\views\shop\list.rhtml (rails中以.rhtml為view模板文件)
<table border="1" width="500px">
<tr>
<td width="20%"><p align="center"><i><b>code</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>
<td width="20%"><p align="center"><i><b>備注</b></i></td>
<td width="10%"><p align="center"><i><b>編輯</b></i></td>
<td width="10%"><p align="center"><i><b>刪除</b></i></td>
</tr>
<% @shops.each do |shop| %> //ruby 語法,循環(huán)所有shop
<tr>
<td><%= shop.code %></td>
<td><%= link_to shop.name, :action => "show", :id => shop.id %></td>
<td><%= shop.phone %></td>
<td><%= shop.remark %></td>
<td><%= link_to "編輯", :action => "edit", :id => shop.id %></td>
<td><%= link_to "刪除", :action => "destroy", :id => shop.id ,:confirm => "Are you sure?" %></td>
</tr>
<% end %>
</table>
[1] <% @shops.each do |shop| %> //ruby 語法,循環(huán)所有shop <% end %>
[2] <%= link_to shop.name, :action => "show", :id => shop.id %> 生成<a>標簽
修改shop_controller.rb
def list
@shops = Shop.find_all
end
http://127.0.0.1/shop/list 即可發(fā)現(xiàn)我們定義的view生效了 :) 2、進行兩表關聯(lián) good 與 shop 關系為多對一的關聯(lián) [1] 要實現(xiàn)在編輯good時可設置其所性shop,先為good表shop_id字段,關聯(lián)shop表
[2] 修改model文件,具體語法可參見相關的參考書本.這里就略過了
class Good < ActiveRecord::Base
belongs_to :shop
end
class Shop < ActiveRecord::Base
has_many :goods
end

[3] 編輯controller
def edit
@good = Good.find(@params["id"])
@shops = Shop.find_all
end
[4] 為good 增加view.rhtml
<select name="good[shop_id]">
<% @shops.each do |shop| %>
<option value="<%= shop.id %>"
<%= ‘ selected‘ if shop.id == @good.shop.id %>>
<%= shop.name %>
</option>
<% end %>
</select>
3、正確命名,自動綁定到objcet中 在java 我們要實現(xiàn)form中的控件提交后自動綁定到object要借用到beanUtil并自己作N多擴展. rails中提供了快捷的方法,自要你按要求定義好控件名就能幫自己綁定. 例如上面的 good[shop_id] 或 good[id] ,good[name] 等等
- 訂單管理
1、order及item關聯(lián)操作
@orderItem = OrderItem.new()
@human = Human.find(@value)
@good_no_param = "good_" + @value
@good = Good.find(params[@good_no_param])
@orderItem.human = @human //為item綁定正確的員工及其訂的盒飯
@orderItem.good = @good
@orderItem.order = @order
@orderItems << @orderItem //為order綁定新的item @order.orderItems = @orderItems @order.save //保存
說明一下,這樣操作,修改order 時原item值并沒刪除或正確的修改,只是將item 的order_id設為0 另外再增加相應的item.關于這方面的正確用法還有待研究:)
- 其它代碼簡單介紹
1、日期操作
@date = @params["date"]
fmt = "%Y-%m-%d"
if @date
else
@date = Time.now.strftime(fmt)
end
2、 find一個對象
Order.find(params[:id])
3、條件查詢
@shopId = @params["shopId"]
@goods = Good.find(:all,
:conditions => "shop_id = "+@shopId,
:order => "code desc")
3、 跳轉頁面
redirect_to(:action => ‘edit‘)
4、session應用
session[:good] ||= Good.find(params[:id])
- 問題
記錄下在開發(fā)過程中遇到的問題 1、沒相應的工具支持,操作起來還是比較麻煩的,雖然代碼量很少 2、并不是很健壯,發(fā)現(xiàn)挺容易出錯,而且出錯信息也不全 3、性能還有待增強,(筆者一邊聽歌一邊開發(fā),發(fā)現(xiàn)在運行程序時,不時會影響我的wmplayer播放)
- 思考與總結
本文并非建議大家使用ruby on rails,因為在應用過程中畢竟發(fā)現(xiàn)不少的問題. 然而我們能學習些什么呢?? [1] 工具支持 [2] 習慣優(yōu)于配置 [3] 一站式的開發(fā) [4] 更少的代碼 我想在那么大的java 開源社區(qū)中實現(xiàn)一站式的開發(fā)還是不現(xiàn)實的. 筆者在想是否能有一個開源項目或者是落實到一個公司的技術框架中能實現(xiàn)到這幾點,那樣就可以從繁雜的配置以及少了為找N多個開源包或版本的問題而煩惱,而能專心于需求的確認及相關的業(yè)務邏輯的改進等等 : ) (完)
|