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