xiaoqiu369

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  7 Posts :: 3 Stories :: 2 Comments :: 0 Trackbacks

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

posted on 2008-12-16 09:58 bobqiu 阅读(174) 评论(0)  编辑  收藏 所属分类: ruby&rails

只有注册用户登录后才能发表评论。


网站导航: