zoukankan      html  css  js  c++  java
  • Ruby on Rails 路由解析

    为了更好的阅读体验。欢迎訪问 作者博客原文

    Route是什么

    Rails中URL的约定严格基于RESTful风格的。client的请求事实上是在操作一些资源。同一资源的不同的请求动作(GET, POST, PUT, PATCH, DELETE)分别对资源进行不同的操作(CRUD)。

    默认的情况下。我们仅仅须要在routes.rb文件里配置好资源,Rails会为该资源生成7种不同的路由,依据路由就能够将client的请求转交给服务端相应的控制器进行处理,然后做出正确的响应。

    Rails Route能识别这样的资源式(RESTful风格)的路由以及非资源式的路由,它是client请求和服务端控制器的粘合剂。能将URL分发给控制器进行处理。


    Rails路由有啥用

    Rails路由主要有两个作用,首先作为client请求和服务端控制器的粘合剂,它负责分发请求,链接URL和Controller。还有一个主要作用是动态生成路径和URL。


    把URL与代码链接起来

    请求GET /articles/17相应的路由是

    get '/articles/:id', to: 'articles#show'
    • 这个请求就会被交给articles控制器中的show动作处理,并把{ id: '17' }传入params

    动态生成路径和URL

    get '/articles/:id', to: 'articles#show', as: 'article'

    在控制器中有

    @article = Article.find(17)

    视图中有

    <%= link_to 'Article Record', article_path(@patient) %>

    会生成路径/articles/17

    提示
    路由是依照顺序定匹配的,一旦匹配成功就会寻找相应的控制器动作。


    资源式路由

    使用资源路径能够高速声明资源式控制器全部的常规路由,无需分别为 index、show、new、edit、create、update 和 destroy 动作分别声明路由,仅仅需一行代码就能搞定


    加入一个资源

    我们在routes.rb文件里加入一个资源photos

    Rails.application.routes.draw do
      resources :photos
    end

    执行$ rake routes能够查看生成的路由

    $ rake routes
          Prefix Verb   URI Pattern                  Controller#Action
        photos GET    /photos(.:format)          photos#index
                 POST   /photos(.:format)          photos#create
     new_photo GET    /photos/new(.:format)      photos#new
    edit_photo GET    /photos/:id/edit(.:format) photos#edit
         photo GET    /photos/:id(.:format)      photos#show
                 PATCH  /photos/:id(.:format)      photos#update
                 PUT    /photos/:id(.:format)      photos#update
                 DELETE /photos/:id(.:format)      photos#destroy

    能够看到生成例如以下7种路由

    HTTP 方法 路径 控制器#动作 作用
    GET /photos photos#index 显示全部文章
    GET /photos/new photos#new 显示新建文章的表单
    POST /photos photos#create 新建文章
    GET /photos/:id photos#show 显示指定的文章
    GET /photos/:id/edit photos#edit 显示编辑文章的表单
    PATCH/PUT /photos/:id photos#update 更新指定的文章
    DELETE /photos/:id photos#destroy 删除指定的文章

    `

    除了生成相应的7种不同的路由。还会生成一些具名辅助方法

    • photos_path,返回 /photos
    • new_photo_path, 返回 /photos/new
    • edit_photo_path(:id), 返回 /photos/:id/edit,比如 edit_photo_path(10) 返回 /photos/10/edit
    • photo_path(:id), 返回 /photos/:id,比如 photo_path(10) 返回 /photos/10

    又来一个资源

    实际项目中,我们会有非常多资源,须要为他们声明路由能够将多个资源放在一个resources中声明,这样能够节省一定的时间。

    resources :photos, :books, :videos

    或者(推荐使用)

    resources :photos
    resources :books
    resources :videos

    单数资源路径

    我们会有不使用 ID就能查看资源的场景。比如,/profile 一直显示当前登入用户的个人信息。

    此时。我们能够把 /profile(不是 /profile/:id)映射到 show 动作:

    get 'profile', to: 'users#show'

    或者使用Symbol

    get 'profile', to: :show

    相同我们能够配置一个单数资源

    resource :geocoder

    执行$ rake routes。会看到生成六种不同的路由

    $ rake routes
           Prefix Verb   URI Pattern              Controller#Action
         geocoder POST   /geocoder(.:format)      geocoders#create
     new_geocoder GET    /geocoder/new(.:format)  geocoders#new
    edit_geocoder GET    /geocoder/edit(.:format) geocoders#edit
                  GET    /geocoder(.:format)      geocoders#show
                  PATCH  /geocoder(.:format)      geocoders#update
                  PUT    /geocoder(.:format)      geocoders#update
                  DELETE /geocoder(.:format)      geocoders#destroy

    相同单数资源式路由生成下面帮助方法:

    • new_geocoder_path, 返回 /geocoder/new
    • edit_geocoder_path。返回 /geocoder/edit
    • geocoder_path, 返回 /geocoder

    提示
    单数资源使用场景不是非常多。了解怎么使用就可以。


    资源嵌套

    实际项目中资源通常不是独立存在的。互相有具有一定业务和逻辑关系,比方一对多一对一多对多。在rails中。解决一个资源属于还有一个资源的子资源的情况,须要使用到资源嵌套来定义它们的路由。

    ……

    为了更好的阅读体验,很多其它内容,欢迎訪问 作者博客原文

  • 相关阅读:
    Access restriction: The type BASE64Encoder is not accessible due to restrict(转载)
    ECLIPSE控制台信息导出
    ZUI分页器的使用案例(ECLIPSE SMS项目)
    关于PLSQL启动用时较长的问题解决
    javax.naming.NamingException: Cannot create resource instance报错修改
    百度AI人脸识别的学习总结
    ECharts3.0饼状图使用问题总结
    jni开发
    AndroidStudio封装jar并混淆
    Androidstudio代码混淆
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7240211.html
Copyright © 2011-2022 走看看