routes:
routes的命名允許你減少重復的代碼,通過分配一個根據生成一個封裝routes rule hash的方法的路徑規則名稱來實現,
你可以定義一個命名路徑,你可以調用它在你的routes.rb文件中來代替connect方法.
例如:
map.home '',:controller=>'main',:action=>'start'
這只是為你做了很少的一點事.首先,它創建一個名為home_url的方法.因此上面的命名規則,前期的請求為:
redirect_to :controller=>'main',:action=>'start' 現在為:
redirect_to home_url
因為*_to方法被重寫的方式,在上面的情況,你沒有將參數傳遞給命名路徑,你也可以將它傳遞給一個引用的方法.
redirect_to :home_url
注意:將命名路徑做為一個符號已經取消了,在rails2.0將被刪除.
這個也能應用于是tests.如果在你的controller里有redirect_to home_url,也可以用 assert_redirect_to home_url.
*_url方法需要一個唯一的可選參數.這個參數是一個hash,插入url_for之中,這樣做就是為了當用redirect_to,link_to時命名規則可以參數化.
你如果說有這樣的route
map.user_page 'users/:user',:controller=>'users',:action=>'show'
你可以這樣做
link_to @user.username,user_page_url(:user=>@user)
注釋:這個僅僅象普通的routes,表單是path_part/:symbol.在上面的例子中,user這部分將只展示在路徑中,并不嚴格與controller相關聯.users/只是path生成的部分,
上面的例子生成<a href="http://localhost/users/7">http://localhost/users/7</a>
比如:
:user 是你定義的參數名稱,如果定義兩個一模一樣的路徑,很可能得不到你想要的結果.對于routes,定義默認值.
當用參數來命名routes,你必須傳遞參數給assert中的命名規則.如果在你的controller中有redirect_to user_page_url(:user=>@user), 你需要有assert_redirected_to user_page_url(:user=>@user).controller中@user的id必須與test中的@user的id匹配.
除了[route_name]_url方法,你可以用hash_for_[route_name]_url方法,這個方法包裝hash,沒有調用url_for
所有的reoute將其它的命名規則用map.connect提供給你.