善用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]
endview用一般的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的||判斷式裡頭,萬一第一個判斷不成立,保證執行第二個判斷。
