顯示具有 Rails 標籤的文章。 顯示所有文章
顯示具有 Rails 標籤的文章。 顯示所有文章

2007年7月4日 星期三

在Rails裡用AJAX Observers

Rails預設即有內建prototype.js,並提供一些語法操作prototype.js,會將rails code轉為prototype的function call。參照“Agile Web Development with Rails” ch18,有用Observer實作livesearch的例子,但這份code有點小問題。

in observe.rhtml:

<label for="search">Search term:</label> <%= text_field_tag :search %> <%= observe_field(:search, :frequency => 0.5, :update => :results, :with => 'term', :url => { :action => :search }) %> <div id="results"></div>

注意observe_field()要放在追蹤的field_id之後,observe_field()放到text_field_tag()之前會失效。

in xxx_controler.rb:

def search @phrase = request.raw_post || request.query_string ... end

這段code裡的request.raw_post會從POST取得form內的資料,但如同raw_post的名稱一般,它取得的是如同GET後附上”var=value”的內容,並且,observe_field()會把追蹤的field_id內的內容取來當做key,若使用者在text field裡輸入”hello”,raw_post內的值會是”hello=”,而不是預想的”search=hello”

因此,解決方法有兩種:

  1. 修改controller:改成request.raw_post[0,request.raw_post.length-1],去掉’=’
  2. 修改view (observe.rhtml):改成

    <%= observe_field(:search, :frequency => 0.5, :update => :results, :with => 'search', :url => { :action => :search }) %>

    參照官方文件,:with會補上key值,再將追蹤的field_id內的值填入key內。

照理說,預設把追蹤的field_id和它的值設為”field_id=value”再傳給:url指定的method才合理吧?

2007年2月25日 星期日

Rails錯誤訊息中文化

中文化基本部份

參照:Rails框架技术讲座:让界面验证提示中文化

注意:本篇區塊內的文字都是一行而已。在開發的根目錄下裝plugin(plugin只會裝到local project裡,不會裝到整個server上):

ruby script/plugin install http://svn.rails2u.com/public/plugins/trunk/active_heart/

修改vendor/plugins/active_heart/lib/active_record_messages_ja.rb內的訊息,這個檔案是UTF-8編碼,看不懂日文的話,可以參照日翻中網站,不過我試了還是看不懂,乾脆看English key猜意思 Orz。

或著做高明點,修改vendor/plugins/active_heart/init.rb,改成:

require_dependency ‘active_record_messages_zh’if defined? ActiveRecord::Base

複制一份active_record_messages_zh.rb,改active_record_messages_zh.rb而不是active_record_messages_ja.rb。

改完訊息後重跑web server才會生效(我是用apache2 + FastCGI)。

去掉欄位名稱的顯示

預設是顯示DB field name,如果用中文名稱當DB field沒這問題,但我習慣用英文的field name,只好把預設的訊息拿掉,參照上面的檔案,把這段code:

def full_messages ... if attr == "base" full_messages << msg else full_messages << @base.class.human_attribute_name(attr) + msg end

去掉@base.class.human_attribute_name(attr) 改成:

def full_messages ... full_messages << msg

這叫自找麻煩,而且顯示錯誤訊息時得一個個自訂 :message ,例如:

validates_presence_of :name, :message => “姓名未填”

但沒用過中文當field name,不知道會有什麼問題。

2007年2月21日 星期三

Ruby + Rails + TextMate的demo影片和Ruby + VIM

眼見為憑,這裡這裡有些demo影片,似乎移動滑鼠讓人有罪惡感似的。學會這些工具後,確實如Brooks在《人月神話》裡的《再論沒有銀彈》所說一般,沒有萬能的方法或工具,但當我們把多個方法和工具合在一起時,軟體開發仍有可能達到數量級的提升。初看感到驚喜,接著讓我感到噁心,為什麼我要學這些東西?看來我有些工程師的屬性,但不適合走這條路。

看了幾個demo影片後,個人推薦“Inserting HTML Tags”,可惜只有Mac有TextMate,而且處理中文仍有問題。VIM應該有類似的補tag、補Ruby code的功能才對,不過我目前連Ruby在VIM內的indent都沒弄好,愈來愈懶得弄工作環境了。

Updated

打入def後,看到沒有end出來,忍不住找了一下VIM相關plugin。

  • Vim/Ruby Configuration Files:懶人包,把一堆plugin和doc合在一起,我沒試。
  • rubycomplete.vim :ruby omni-completion。看起來強的樣子,打Ctrl+X Ctrl+O會有選單,但要VIM7.0 + ruby interface(?),我只會在ports下打make install裝VIM,沒法試。
  • ruby-macros.vim:macros for the ruby language。至少打def後會有end了,當然if、for也有,單雙引號之類沒寫好,反而難用,我把這部份的設定註解掉。
  • rails.vim: Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more。看起來頗強的,前兩項在insert mode用,這在ex mode用,用自訂的命令可以在VIM內做些shell下的事,像是rake、ri。附加些強大指令,像是extract view內幾行,另存成subview檔(_XXX.rhtml),並且附有詳細文件。但我懶得學這些指示,還是IDE較方便。

結論:至少打def後會有end了。

2007年2月17日 星期六

Ruby on Rails:建置與執行

書藉基本資料:Ruby on Rails:建置與執行(Ruby on Rails:up and running)

skylight很喜歡買技術的書,找他聊天時偶而可以借個幾本,《Beyond Java》和這本就是這麼看來的。他說看中文書有個好處,技術關鍵字會用英文表示,更容易找到,這麼說也有道理。

目前只有兩本Rails的中文書,另一本是博碩出的《Ruby on Rails網路應用程式開發與建置》,健文說有兩個人和他推這本,而說O’Reilly的這本不好;我沒看過博碩這本,有機會來看看。我和skylight討論後也覺得O’Reilly這本不好,但這本幫了我一個大忙。

如果只能挑一本書學Ruby、挑一本書學Rails,Pragmatic出版的《Programming Ruby》《Agile Web Development with Rails》無疑是最佳選擇,但這適合有時間的人看。之前在趕case時,看了《Agile Web Development with Rails》三分之一,沒時間看下去,寫寫又一堆問題,這本書不太適合查閱,或著說,沒有先對Rails有一定的概觀,很難知道要找什麼keyword。

在這種寫了一些Rails、有破碎不全的Rails觀念的前提下,看O’Reilly的《Ruby on Rails:up and running》正好,這本書強調沒有廢話,讓有經驗的programmer能快速上手用Rails,不過它廢話真是太少了,連帶前幾章例子也少了點,沒有一點Rails的概念會看不懂。但以我的情況來說,卻是最佳入門手冊,花個半天看完,寫起Rails順手多了。

《Ruby on Rails:up and running》用的例子是網路相簿,有照片可多重分類、目錄有樹狀楷層,又有slideshow - slide - photo之間的複雜relation,例子舉得好,像我想先看relational schema要怎麼用Rails操作,這個例子能清楚解釋。ch6、ch7教AJAX和Test Suit,對AJAX和Test Driven Devlopment來說,是不錯的入門,但整本書好像沒提到session。反觀《Agile Web Development with Rails》用購物網站當例子,很早就提到session,但購物網站的例子沒網路相簿好,無法先說明最重要的relatinoal schema轉換,兩本有些互補。《Ruby on Rails:up and running》以說明Rails功能為主來編排內容,可以先看到想看的功能;《Agile Web Development with Rails》以說明完整專案的流程,引入如何使用Rails,需要較多時間閱讀,但讀完是值得的。

《Ruby on Rails:up and running》Appendix B Quick Reference滿有用的,書上說可從官網下載電子版,卻沒看到下載點,反而在別的地方看到線上試看版,只好抓些資訊放這 (source):

2007年2月14日 星期三

簡單就是美

Rails的設計很直覺,但常年寫網頁下來,已養成不直覺的思維,從frame到single loader,從html含樣式到css,從relational schema到OOD,想通以後,又覺得Rails做法很直覺,沒什麼特別的,但想通前就是轉不過彎,自己就是想不到這樣的設計。

這大概就是簡單和簡潔的差異吧,如同MIT Media Lab教授John Maeda說的,他喜歡找出最簡單的設計,這往往要從複雜的體系中整理出來:

簡單 -> 複雜 -> 簡潔

這種直覺難以查覺,卻又容易理解,這也正是它可貴之處。當有多個方法可以解決一樣的問題時,我們傾向於用最簡單的方法,較無道理地相信簡單的方法最好,這個原則也是強調簡單的美。

Decision Tree是著明的實例,不管Decision Tree的結構如何,它們都能正確回答一樣的training data,引入entropy的觀念找出最簡單的Decision Tree,並且相信這有最大的機率預測正確答案。Regression亦是如此,在最低誤差值和最少未知數的抉擇裡,反而傾向於用較少的未知數,而不是更低的誤差值。

許多問題我們難以找出最佳解,而傾向於用一般性原則評估”正確性”,想通這點讓我少了不少煩惱,這世界上有太多無解的問題,有太多無法評估正確性的問題,沒換個方向思考的話,難以踏出做研究的第一步。

btw,這篇嚴重離題了,我把三個心得混在一起講:Rails的好,簡單的好,研究心態的轉變。

2007年2月5日 星期一

Ruby on Rails + Apache2 on FreeBSD

Rails是Ruby開發Web的超強framework,簡稱為RoR,國內用RoR最有名的站是HEMiDEMi,RoR的強大之處可以參閱這則新聞:"網站開發快10倍-探索Ruby on Rails的高速魔法"

google “ruby on rails”可以找到官方網站,有WEBrick的安裝和使用教學,入門文件可以參閱:" Rolling with Ruby on Rails",相當容易,用WEBrick玩RoR後,覺得RoR很有潛力,若對Ruby有疑慮,可以改用CakePHP - 用PHP寫成的RoR。

RoR也可以搭配apache使用,文件很多,這篇是我安裝完寫的筆記:“Ruby on Rails + Apache2 on FreeBSD”

原本只是想用RoR,卻把apache2、php5、php5-externsion、phpMyAdmin、CGI、FastCGI、RoR的安裝和運作流程都摸了一下,這就是玩系統的悲哀啊。