zoukankan      html  css  js  c++  java
  • Rail 路由设置

    在routes.rb文件中,共列举了5种主要路由,分别为默认路由(Default Routes)、资源路由(RESTful Routes)、命名路由(Named Routes)、嵌套路由(Nested Routes)、正则路由(Regular Routes)。

    1、默认路由 Default Routes

    顾名思义,默认路由是创建应用时,Rails自动生成的,位于routes.rb文件的最后一行。

    1 match ':controller(/:action(/:id(.:format)))'

    默认路由由’/'分割为3部分,第一部分解释为控制器,第二部分解释为Action方法,第三部分变为相应参数传递。

    例如,当有”http://domain.com/users/show/1″请求发生时,Rails去请求users控制器的show方法,并将id=1传递给show方法。

    2、资源路由 RESTful Routes

    资源路由是Rails用来描述资源及其状态的,通俗些,就是用来描述数据库表/实体的相关数据操作。

    值的注意的是,资源路由巧妙的使用了HTTP响应,完成了数据库CRUD操作。例如:

    1 resources :users

    这样就产生了7种不同的路由,用来描述User的数据库操作。如下表所示:

    HTTP响应URLAction方法描述
    GET /users index 获取所有user数据
    GET /users/new new 跳转到创建user页面
    POST /users create 创建新的user
    GET /users/1 show 获取id=1的user对象
    GET /users/1/edit edit 编辑id=1的user对象
    PUT /users/1 update 更新id=1的user对象
    DELETE /users/1 destroy 删除id=1的user对象

    这7中路由完成了资源的所有CRUD操作,与此同时,rails还为资源生成了一些辅助方法:

    • users_path : 映射了 index 和 create 方法的路径 ;
    • new_user_path : 映射了 new 方法的路径 ;
    • edit_user_path : 映射了 edit 方法的路径 ;
    • user_path : 映射了 show、update、destroy 方法的路径 ;

    3、命名路由 Named Routes

    命名路由可以为任意一个确定的URL定义名称,该名称亦可用在控制器方法中,实现页面提交和重定向。例如:

    1 match 'hello':to => 'users#index':as => 'hello'

    使用上述代码后,Rails便知道’hello’需要调用users控制器的index方法。同时,还为该路由创建了两个辅助方法:

    • hello_path 和 hello_url : 映射了 users#index 方法的路径 ;

    4、嵌套路由 Nested Routes

    嵌套路由是用于声明一个资源包含另一个关联资源的访问方式。例如:博客系统的文章和评论两个资源就可以这样描述,因为评论应依附于文章存在,不应独立出来。于是便有:

    1 # 直观的写法
    2 resources :articles do
    3     resources :comments
    4 end
    5 # 更简单的写法
    6 resources :articles:has_many => :comments

    于是,当我们http://domain.com/articles/1/comments请求资源时,rails会理解为获取id=1的那篇文章的所有评论。很直观,有木有?

    5、正则路由 Regular Routes

    正则路由的使用概率较低,但它却能完成非常严谨的路由访问。它可以为每个可变参数经行正则验证,只有通过验证的url,才会被指定到定义好的控制器方法中去。简单举个例子:

    1 match 'users/search/:id/:age':controller => 'users':action => 'search':age => /[2-5][0-9]/

    上面的路由只有在age参数传递在20-59之间时才会被匹配,如http://domain.com/users/search/1/25,便会匹配成功;而http://domain.com/users/search/1/60,则不会被匹配。

    路由优先级

    在Rails中,路由生效的优先级是:从routes.rb文件定义的路由中从上到下依次匹配,最早匹配的路由会生效。也就是说routes.rb文件中的路由优先级从上到下依次降低。

    PS:当没有任何路由匹配到时,Rails会抛出Routing Error异常。

     

  • 相关阅读:
    成功后的迷失
    让主参与的人生
    生命的见证
    谁偷走了我的安全感
    简单理解分页原理
    WebApp开发入门
    程序员必需知道的搜索引擎的搜索技巧
    提高网页打开速度技巧
    十分钟了解HTTP协议
    简单实现页面临摹设计图功能
  • 原文地址:https://www.cnblogs.com/iosdev/p/2844039.html
Copyright © 2011-2022 走看看