- 前言
近期在java社區(qū)中一種新的腳本語言ruby,及用ruby開發(fā)的一個wab框架 rails也熱鬧了起來.引起了不少的java開發(fā)人員的關(guān)注.
本人平時還是很少接觸腳本語言方面東東,看到相關(guān)的評論
例如: "習(xí)慣約定優(yōu)于配置" -- 那樣就用象java那樣麻煩且繁雜地配置N多XML
"‘一站式‘面向用戶的簡單易用的框架"
"Ruby 語言- 真正的面向?qū)ο竽_本語言"
"Ruby 語法更簡單,靈活"
"聲稱:Rails 的開發(fā)效率是 java 開發(fā)的 10 倍"
等等,再得到老大的強烈推薦,不禁也開始接觸了一下.
聲明:本人接觸三天,看過一些簡單的介紹以及一些文檔,實操過一個小項目,并未深入了解,這一文章并非語言及框架使用教程,只是一個感性認識,其中代碼或許并非最簡潔,如要更深入學(xué)習(xí)ruby,rails,請參考相關(guān)的官方站點以及其語法參數(shù)書.
- Ruby 與 Rails
[什么是RUBY ?]
Ruby 是由日本人松本行弘發(fā)明的一種面向?qū)ο蟮哪_本語言.
聲稱,更快,更通俗易懂的面向?qū)ο蟮恼Z言,本人接觸這段時間,感覺到關(guān)于面向?qū)ο蟮拇_做得不錯.
一些特點:
1、一切都是對象,例如:
數(shù)據(jù)類型轉(zhuǎn)換提供如 to_ary,to_i,to_s 等方法,
@i = "2".to_i //字符串轉(zhuǎn)數(shù)值類型
puts @i+1
不再象java中的諸如:
Integer.parseInt()
String.valueOf()
那樣難看與及難以理解
Time.now.strftime(fmt) Time.now對象通過strftime格式化日期類型
再如koalant在它那本ruby on rails實踐中說到 -166.abs 可以直接取其-166絕對值
………………
2、代碼塊非強制用{} ,無需 ; 作分行標(biāo)識;
3、語法靈活,一種可以功能可多種實現(xiàn),隨個人愛好;
4、語法簡潔等,做一個應(yīng)用只要用到幾行代碼,這也是腳本語言的優(yōu)勢所在
更詳細可參考 http://www.ruby-lang.org/ 以及下面提供的些文檔資料.
[什么是Rails ?]
RAILS是用RUBY開發(fā)的一個web框架.
實現(xiàn)一站式開發(fā). http://www.rubyonrails.org/ 有比較詳細的介紹.
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 應(yīng)該是關(guān)于mail方面的東西
[一些資料]
[1] koalant寫的Ruby on Rails實踐 ,通俗易懂,介紹了ruby on onrails中的一些基礎(chǔ)的東東
[2] IBM中文文章: Ruby on Rails 和 J2EE:兩者能否共存?
[3] Agile Web Development with Rails(以一個案例詳細介紹了ruby on rails)
下載請見:http://www.itpub.net/398528.html
[4] Ajax on Rails http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html
[5] Programming Ruby http://www.rubycentral.com/book/index.html - 快速安裝
1、下載
到目前為止最新版本是Ruby 1.8.2,可以到http://rubyforge.org/frs/?group_id=167&release_id=2049
下載 One-Click Installer - for Windows
2、點擊下載exe文件一直NEXT 安裝就OK [ 說明:本人安裝在C:\ruby\目錄]
3、使用 rubygems 來安裝 rails
CMD進行命令行窗口,通過網(wǎng)絡(luò)進行遠程安裝 rails
C:\>
gem install rails --include-dependencies
//
Attempting local installation of ‘rails‘
Local gem file not found: rails*.gem
Attempting remote installation of ‘rails‘
Updating Gem source index for: http://gems.rubyforge.org
………………
………………//一連串安裝信息
C:\> rails C:/myrails //建立web app 目錄
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
等
說明如果發(fā)現(xiàn)gem,rails命令等用不了,可能是環(huán)境變量未設(shè)置好,
可自行設(shè)置指向你的 安裝目錄/bin
4、運行服務(wù)器
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、 學(xué)習(xí)一個Ruby的語法
ruby 以rb為后綴的文件.
hello.rb
@a = "hello world!"
puts @a
C:\ruby\bin>ruby hello.rb
hello world!
其它可參考語言書學(xué)習(xí).
- 我的訂餐系統(tǒng)
1、功能,包括四類基本管理,主要是新增,修改,查看,刪除(CURD) 四種操作
餐廳管理(shop)
菜式管理(good)
人員管理(human)
訂單管理(order)
2、首頁效果截圖
由于本人偷懶,樣式借用了jsp wiki的,在此聲明一下: )
[主界面,使用frame,左邊為主要功能菜單,右邊為進行CURD操作提供界面操作]
[頁面結(jié)構(gòu)如下所示]
- 員工管理
1、快速開發(fā),自動生成基本文件結(jié)構(gòu)目錄及文件
執(zhí)行命令,自動生成項目所需要的文件及其文件結(jié)構(gòu),幾秒種架設(shè)好訂餐系統(tǒng)框架!!!
C:\myrails>rails c:\myMealOrder
說明:rails 一直貫穿的思想說是"習(xí)慣約定優(yōu)于配置",所以,文件結(jié)構(gòu)都是它定義的,我們只要將相應(yīng)
文件放到其定義好的目錄下就行了。
例如:controller 應(yīng)該放到其 webapp/app/controllers 下,本文目錄為[C:\myMealOrder\app\controllers]
model 應(yīng)該放到其 webapp/app/model下,本文目錄為[C:\myMealOrder\app\model]
views 應(yīng)該放到其 webapp/app/view下,本文目錄為[C:\myMealOrder\app\views]
另外,根本目錄為webapp/public/ 你可以通過修改index.html來定義你自己的index頁面
2、啟動webrick 服務(wù)器測試
rails默認使用webrick服務(wù)器,官方網(wǎng)站了解其更多www.webrick.org
執(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`)
)
說明,習(xí)慣約定,默認情況下主鍵名為id,表名為復(fù)數(shù)形式,具體操作我也有點糊涂,
例如本例子中的human model對應(yīng)其數(shù)據(jù)表名為humen。這里我就略過了。具體資料可參考更詳細的資料。
配置,打開 C:/myMealOrder/config/database.yml
將其中參數(shù)設(shè)置正常就行了。
例如將 database: rails_development 設(shè)成你的數(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" 就能對應(yīng)生成human 的CURD操作及其頁面。
重啟服務(wù),再次瀏覽 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,調(diào)用相對應(yīng)的方法,及view模板;
3、將結(jié)果返回給瀏覽者
或許你會認為,這一默認的view大多數(shù)情況下并不適合,或許需要自己設(shè)計view模板,也行,rails提供快捷的方法
方便用戶自己設(shè)計view模板,只要定義action并將同名view文件(rhtml后綴的文件)放到其webapp/app/views/目錄即可,
下面將會介紹到相關(guān)的操作。
- 餐廳及其菜式管理
餐廳(shop),菜色(good)按員工管理操作方法進行新建,在這里就略過了!!
http://127.0.0.1:3000/shop
http://127.0.0.1:3000/good
1、自己設(shè)計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>標(biāo)簽
修改shop_controller.rb
def list
@shops = Shop.find_all
end
http://127.0.0.1/shop/list 即可發(fā)現(xiàn)我們定義的view生效了 :)
2、進行兩表關(guān)聯(lián)
good 與 shop 關(guān)系為多對一的關(guān)聯(lián)
[1] 要實現(xiàn)在編輯good時可設(shè)置其所性shop,先為good表shop_id字段,關(guān)聯(lián)shop表
[2] 修改model文件,具體語法可參見相關(guān)的參考書本.這里就略過了
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關(guān)聯(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設(shè)為0
另外再增加相應(yīng)的item.關(guān)于這方面的正確用法還有待研究:)
- 其它代碼簡單介紹
1、日期操作
@date = @params["date"]
fmt = "%Y-%m-%d"
if @date
else
@date = Time.now.strftime(fmt)
end
2、 find一個對象
3、條件查詢
@shopId = @params["shopId"]
@goods = Good.find(:all,
:conditions => "shop_id = "+@shopId,
:order => "code desc")
3、 跳轉(zhuǎn)頁面
redirect_to(:action => ‘edit‘)
4、session應(yīng)用
session[:good] ||= Good.find(params[:id]) - 問題
記錄下在開發(fā)過程中遇到的問題
1、沒相應(yīng)的工具支持,操作起來還是比較麻煩的,雖然代碼量很少
2、并不是很健壯,發(fā)現(xiàn)挺容易出錯,而且出錯信息也不全
3、性能還有待增強,(筆者一邊聽歌一邊開發(fā),發(fā)現(xiàn)在運行程序時,不時會影響我的wmplayer播放)
- 思考與總結(jié)
本文并非建議大家使用ruby on rails,因為在應(yīng)用過程中畢竟發(fā)現(xiàn)不少的問題.
然而我們能學(xué)習(xí)些什么呢??
[1] 工具支持
[2] 習(xí)慣優(yōu)于配置
[3] 一站式的開發(fā)
[4] 更少的代碼
我想在那么大的java 開源社區(qū)中實現(xiàn)一站式的開發(fā)還是不現(xiàn)實的.
筆者在想是否能有一個開源項目或者是落實到一個公司的技術(shù)框架中能實現(xiàn)到這幾點,那樣就可以從繁雜的配置以及少了為找N多個開源包或版本的問題而煩惱,而能專心于需求的確認及相關(guān)的業(yè)務(wù)邏輯的改進等等 : ) (完)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。