期刊/介紹Ruby On Rails(下)
出自台灣中等學校資訊管理人學會
目錄 |
[編輯] 摘要
- 作者:李開文
[編輯] 介紹Ruby On Rails(下)
[編輯] Ruby on Rails新手指南
[編輯] Ruby
要使用Rails,非得學習Ruby不可。Ruby是一個純物件導向的語言,意思是說在裡面任何東西,一個字串,一個數字都是一個物件。相較於其他script語言,ruby提供較多的與該物件相關且符合英文意義的成員函式,我們用ruby附的指令介面irb(interactive ruby)展示一下:
-1.class
# output Fixnum
-1.abs
# output 1
1.succ
# output 2
1.succ.succ
# output 3
可以看到1.succ會回傳1的successor(下一個數字)也就是2,而2的類別當然是Fixnum,也就是可以繼續呼叫succ,也因此有 1.succ.succ這種呼叫法。類似的作法在所有支援物件導向的語言都可見。而ruby不同的地方是他允許不加上"( )"便可以進行呼叫,只不過是沒有傳參數進去,也就是像VB一樣。設計師可以盡量用一行就可以描述一串程式動作,加上所有類別都提供相當實用的成員函式,便產生非常簡潔的程式碼。
say = "I love Ruby"
puts say
# Output "I love Ruby"
# 字串提供"[ ]"成員函式來取得子字串,而下一行的功能就形同於取代
say['love'] = "*love*"
puts say.upcase
# Output "I *LOVE* RUBY"
# 下行程式碼展示了Fixnum的成員函式times,而傳入一個"{ } ",稱作為區塊(物件),如此這個區塊內的程式碼會被執行五次。
5.times { puts say }
# Output "I *love* Ruby"
# five times
剛剛有提到,ruby是一個純OO的語言,在程式裡任何東西皆為物件,自然就有物件該有的特性。
如果你想要試試語法,可以使用irb,ruby附的編輯器scite,或者是http://tryruby.hobix.com/ 。初學者最常見到就是不知道該呼叫啥成員函式,你可以透過http://www.gotapi.com/rubyrails 去查,或者是任何物件都有一個methods函式可以呼叫,至少你可以掌握你有什麼。
而目前針對ruby語言個人認為比較值得看的參考,就是下列網址:
- http://www.zenspider.com/Languages/Ruby/QuickRef.html
- http://www.ruby-doc.org/docs/ProgrammingRuby/
- http://willh.org/cfc/wiki/index.php/Programming_Ruby,_1st_Edtion
如果你是熟悉Perl的老手,那Ruby對你而言是再快樂不過的事情了。.Net或是Java的也沒關係,花些時間深度地思考什麼叫做純物件導向,或者去看看Smalltalk,便能從語言面就瞭解Ruby。
[編輯] Rails
因為Rails終究是一個MVC Framework,深讀MVC的內容是相當重要的,一個不小心你的程式碼就會有許多誤用,造成未來維護困難或效能緩慢。說起來就算是老手,一旦遇上趕專案的狀況,為了要快點寫完,很多時候也難逃誤用的命運。
但是在這裡我不詳述Rails的MVC究竟該怎樣去理解或開發,那是下一篇文章,先推薦Agile Web Development with Rails及Ruby on Rails:Up and running這兩本書好了。第一本書深入淺出,從觀念,目錄結構到撰寫流程解釋地相當詳盡,對於不是寫Rails的人來說,從中學習MVC也是相當棒的,可惜還沒有中文翻譯。第二本書以實做的角度直接切入程式碼,並且有中文翻譯,對於新手可以說是相當適合。
有關Rails的連結,最推薦的是:
不過既然是介紹,免不了還是要說明一下目錄結構。
Rails的目錄結構如上圖,基本上大部分的程式碼都在apps/,也就是代表你的應用程式本身,在此我們僅介紹撰寫過程中一定會碰到的目錄。
所有的Controller類別基本上都繼承自application.rb,程式碼就擺在controllers/,讓你可以在其中寫所有 Controller共用的成員函式。Helper就是載入到view裡讓view可以呼叫的成員函式,所以application_helper.rb 也是同樣的情況。models/相當單純不用多解釋,而views/除了必須新增和controller同名小寫的目錄來擺rhtml以外,也可以使用所謂的Layout功能。Layout就是讓所有的view可以選擇性地套入一個主樣版,通常我們在畫面設計上都會做成網站的外框。
在Rails專案產生完畢後,最先就是要編輯database.yml來設定好資料庫系統的存取方式。值得注意的是Rails預設提供三種應用程式運作使用的環境設定,有development,test,production,分別代表開發時,進行單元測試時,及正式上線時。這三個設定檔理論上應該分別設定在不同的資料庫,而啟動到底是使用了哪一個設定檔,就是看傳遞給web server怎樣的參數。此外如果有要預先require的函式庫或是include的module,都可以放在environment.rb裡。 route.rb負責上述URL的結構,也就是說那個結構是可以改的。
一個Web應用程式一定有靜態資料,包括圖片,css與js,分別擺在public/的images/,stylesheets/, javascripts/,並且在view裡可以透過image_tag, include_javascript_tag, stylesheet_link_tag來呼叫。Rails提供了DB Migration功能,讓你可以輕鬆地撰寫資料庫schema,並且可以視database.yml轉移到不同的資料庫,利用產生器的話,會自動產生在 db/。
[編輯] 結論
未來Rails的發展方向,不僅會在REST這個主題,使用JRuby來整合Java,甚至是Offline應用程式都有相當大的可能性。以往我發現,任何視窗上的應用程式,免不了就是一定要遇到作業系統本身帶來的問題,如同Windows,可能他一更新,就封鎖掉你的應用程式。Web是一個開放的平台,提供很多的創意空間,也不見得要用同一種技術解決問題,有多種瀏覽器可以選擇,不會被侷限在一個平台上。
文章到最後,當然還是得跟各位提一下Rails的缺點,畢竟是以純物件導向撰寫的Web應用程式,所需要的代價就是大量的CPU記憶體資源。也因為這一點,有很多Rails的開發者也積極地加入叢集化的支援。但畢竟電腦硬體只會越快不會越慢,Web未來的趨勢還是會以敏捷編程(Agile Programming)的方式來快速開發及佔有市場。
[編輯] 參考連結
- http://blog.roodo.com/rocksaying/archives/2680742.html
- http://www.lis186.com/?p=1750
- http://tw.myblog.yahoo.com/jimwayne-blog/article?mid=28&prev=29&next=27
- http://inet6.blogspot.com/2006/12/ruby-on-rails.html
- http://www.ibm.com/developerworks/cn/java/j-cb08016/
- http://www.ibm.com/developerworks/cn/linux/sdk/php/php_design/index.html
