Ruby on Rails Tips

  1. Session只能存4KB以下的資料,所以請不要存整個object data到session裡。否則在production mode下跑時可能會出現500 Error
  2. cross site做AJAX POST request時會出現ActionController::InvalidAuthenticityToken的error。原因是Ruby本身有request保護機制,會去檢查授權的token值。如果要能work請參考:
    http://ryandaigle.com/articles/2007/9/24/what-s-new-in-edge-rails-better-cross-site-request-forging-prevention。其中一個最簡單的方式是加入這行skip_before_filter :verify_authenticity_token到controller的class開頭,則ruby會略過request token的檢查機制。
  3. 在development mode收到request時,controller class會自動reload
    所以class variable(@@xxxx)作用時不會像static variable(in Java, C++)一樣
  4. 如何切換到production mode? 在environment.rb裡加入這行:
    RAILS_ENV = ‘production’ (舊寫法ENV['RAILS_ENV'] ||= ‘production’已不可用)
  5. 如何include槽狀module?
    例如,我想要在controller裡使用ActionView > Helpers > TagHelper > escape_once這個function
    則在class開頭定義:
    include ActionView
    include Helpers
    include TagHelper
  6. 如何在view中escape字串?
    1. 用<%=h xxxx %> 將整個文字輸出都做escape
    2. 使用escape_once(xxxx),可以將指定的字串做escape
    用第2個方法的時機是有時後你只想escape部分的文字或者文字是被帶在參數裡,例如:
    <%= link_to escape_once(t.name), {:action => “test”, :tag_id => t.id} %>
  7. 如何將時間顯示為yyyy-mm-dd hh:mm:ss格式?
    <%=h announce.created_at.to_s(:db) %> #=> 2008-05-06 17:12:52
    這個方法看起來會依據資料庫的種類而不同,我是用MySQL,所以其它的就不保證一樣了
    1. last updated at 2008-05-06