Code Digest #2

by winson, 8 months ago.

善用return unless的技巧,可以在同一個頁面觸發動作:

def login
  @page_title = 'What are you doing?'
  return unless request.post?
  user = User.find_by_login params[:user][:login]
  redirect_to :action => 'home' if user.password == params[:user][:password]
end
view用一般的form_tag就可以了。判斷user是否已登入:
def logged_in?
  session[:user]
end
請在application controller寫下這個action,那麼隨處都可以使用logged_in?來做條件判斷,前提是必須使用session。要知道目前登入的user是誰嗎?
def current_user
  @current_user ||= User.find(session[:user]) if logged_in?
end
同理可證,麻煩去問問session,他可掌握著每個人的行蹤呢。反過來說,登入時就必須記住目前的user:
def current_user=(user)
  user ? session[:user] = user.id : session[:user] = nil
end
在一個訊息傳遞系統裡頭,當訊息不是空的,才會存檔;如果存檔成功,才會顯示提示訊息,這要怎麼做?看起來簡單,其實可以更簡單:
notice_stickie "Your message was posted." if !message.empty? && message.save
萬一訊息是空的,既不會提示訊息,連存檔都不存檔。因為在Ruby的&&判斷式裡頭,萬一第一個判斷不成立,保證不會執行第二個判斷。有人用file_column這個外掛嗎?萬一有人沒上傳大頭照,可是很難處理的呢。
image_tag url_for_file_column(user, 'photo', 'medium') || "/images/avatar.jpg"
這裡不僅幫你判斷,還送你預設的大頭照。同理可證,在Ruby的||判斷式裡頭,萬一第一個判斷不成立,保證執行第二個判斷。


  • Posted in Sugar, on Sunday, October 28, 2007, at 04:57 AM.