在Ruby中,singleton method指的是只有該物件才有的方法,而加在 Class object 上的 singleton method 也就變成了 class method。
分類: Programming
趁過年把 The Ruby Way 拿起來讀一讀,大部頭一本沒辦法從頭念到尾,就挑了最重要的第11章( OOP and Dynamic Features in Ruby) 來念。這個主題值得閱讀的還有 Ruby for Rails 第13章(Ruby dynamics) 跟最近出的 Advanced Rails 一書第1章(Foundational Techniques),因此這幾篇文我還會修修改改就是了。
Spakit 源自 registrano.com 和 Massage,是一個可以讓你將現成的網站輕鬆轉換成 SPA (single page application) 的 Rails Plugin。只需在 view 中換用 Spakit helper,不需要更動 controller code,就可將超連結和表單送出變成 Ajax 送出並更新頁面。
spakit 目前放在 github,另外也包成 gem,安裝方式如下:
gem install spakit cd /your_rails_app/vendor/plugin gem unpack spakit mv spakit-0.9.0 spakit
並且 rename 成 spakit。裝好之後,首先建立一個 Spakit 專用的 Layout,一個簡單的範例如下:
# /view/layouts/spakit.rhtml <p><%= flash[:notice] %></p> <%= yield %>
接著就可以使用 Spakit 專用的 helpers,目前有 spakit_link_to, spakit_form_for 和 spakit_form_tag 三種可以使用,用法如下:
spakit_link_to 'new person', :url => new_person_path spakit_form_for @person, :url => people_path
如此按下連結或送出表單後,Spakit 就會送出 Ajax request(i.e. prototype’s Ajax.Updater ),然後將回傳的 HTML 結果更新到#content 區塊。
如果你想要支援 Ajax 的 Histroy Bookmarks,建議可以採用 Really Simple History(RSH) library 來處理瀏覽器的上一頁下一頁問題,這部份的範例程式附在 plugin 的 README (使用到 jquery library,好心人有空可以幫忙寫 prototype version)。
P.S. 這篇文的英文版在 Handlino’s blog
又來推薦 PDF 武功秘笈, Writing Efficient Ruby Code。
Ruby 是個很慢的語言,但有些作法應用得當,還是會有不錯的改善。不過要知道程式碼的可讀性跟執行效率有時候是衝突的,這點還需拿捏,尤其 software life cycle 一開始可讀性比較重要。有句最佳化的經典名言一定要引一下:
未成年就這麼優,是一切邪惡的根源
Premature optimization is the root of all evil
這裡紀錄一些看到有趣的事情,PDF 裡有更詳盡的 example code。