什麼是User Page?也許每個User都有一個自己的首頁,沒特別加工處理的話,網址多半像這樣:
http://demo.rails.org/user/show/1234 # 1234 means a user id.這不是很容易完成嗎?那還有什麼問題呢?
當然有,這種網址太長、太醜、太不User Friendly,而且揭露了許多不該揭露的訊息。例如: 為什麼要讓別人知道處理User的controller叫做user?為什麼要顯示重要的user.id?這樣一來變成必須去擋user/edit/1234或user/delete/1234這類的處理。
如果可以進一步把網址上的controller、action都給扔了,直接顯示成user name應該很不錯吧,例如:
http://demo.rails.org/winson # winson means a user name.那怎麼做呢?要改這幾個小地方:
1.改Route設定。 2.改user/show。 3.改404。
在Route設定裡,加這一項:
map.user_page ':user', :controller => 'user', :action => 'show'這是告訴Rails碰到沒有controller、action,而只有一串字的,要用user/show去處理。
問題來了,所謂的一串字,並沒有id,於是要改user/show action,把原本的
@user = User.find params[:id]改成@user = User.find_by_name params[:user]這裡不得不大力讚揚一下Rails的Dynamic Finder,可以把這種簡單查詢設計的這麼無腦。
好啦,要是隨便Key一個不存在的user.name那該如何是好?簡單,加個邏輯判斷,於是上次用來處理Missing Route的404 action,便可以拿來使用,像這樣:
@user = User.find_by_name params[:user]
if @user
@page_title = @user.name
@bug_pages, @bugs = paginate :bugs, :order => 'name', :per_page => 15
else
render :action => "404"
end整個修改過程不用兩分鐘,真是輕鬆暢快啊!!
