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提供给你.