routes:
routes的命名允許你減少重復(fù)的代碼,通過(guò)分配一個(gè)根據(jù)生成一個(gè)封裝routes rule hash的方法的路徑規(guī)則名稱來(lái)實(shí)現(xiàn),
你可以定義一個(gè)命名路徑,你可以調(diào)用它在你的routes.rb文件中來(lái)代替connect方法.
例如:
map.home '',:controller=>'main',:action=>'start'
這只是為你做了很少的一點(diǎn)事.首先,它創(chuàng)建一個(gè)名為home_url的方法.因此上面的命名規(guī)則,前期的請(qǐng)求為:
redirect_to :controller=>'main',:action=>'start' 現(xiàn)在為:
redirect_to home_url
因?yàn)?_to方法被重寫(xiě)的方式,在上面的情況,你沒(méi)有將參數(shù)傳遞給命名路徑,你也可以將它傳遞給一個(gè)引用的方法.
redirect_to :home_url
注意:將命名路徑做為一個(gè)符號(hào)已經(jīng)取消了,在rails2.0將被刪除.
這個(gè)也能應(yīng)用于是tests.如果在你的controller里有redirect_to home_url,也可以用 assert_redirect_to home_url.
*_url方法需要一個(gè)唯一的可選參數(shù).這個(gè)參數(shù)是一個(gè)hash,插入url_for之中,這樣做就是為了當(dāng)用redirect_to,link_to時(shí)命名規(guī)則可以參數(shù)化.
你如果說(shuō)有這樣的route
map.user_page 'users/:user',:controller=>'users',:action=>'show'
你可以這樣做
link_to @user.username,user_page_url(:user=>@user)
注釋:這個(gè)僅僅象普通的routes,表單是path_part/:symbol.在上面的例子中,user這部分將只展示在路徑中,并不嚴(yán)格與controller相關(guān)聯(lián).users/只是path生成的部分,
上面的例子生成<a href="http://localhost/users/7">http://localhost/users/7</a>
比如:
:user 是你定義的參數(shù)名稱,如果定義兩個(gè)一模一樣的路徑,很可能得不到你想要的結(jié)果.對(duì)于routes,定義默認(rèn)值.
當(dāng)用參數(shù)來(lái)命名routes,你必須傳遞參數(shù)給assert中的命名規(guī)則.如果在你的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方法,這個(gè)方法包裝hash,沒(méi)有調(diào)用url_for
所有的reoute將其它的命名規(guī)則用map.connect提供給你.