美文网首页
【2017.3.15】Rails 的 CRUD 与 RESTfu

【2017.3.15】Rails 的 CRUD 与 RESTfu

作者: Ludiwgbet | 来源:发表于2017-03-15 19:25 被阅读83次

    HTTP 请求( Request)与 HTTP 动作 ( Verb)

    一般网页的运作原理是这样的:

    1.使用者在浏览器输入了某个网址,点击了某个连结。这都叫发出 HTTP 请求 ( Request)。
    2.而浏览器回应之后:产生页面,或者是重新导向。这都叫 HTTP 回应( Response)。
    一般来说,使用者最常使用的是两种类型 / 动作 ( Verb )的请求: GET 与 POST。

    GET :输入网址,点击某些网址。这都是 GET。
    POST:送出表单。这叫做 POST

    HTTP 请求( Request)与 HTTP 动作 ( Verb)

    因为 CRUD 是常见的操作行为,但是大家实作的方式、与网址设计方式不一样。造成很多维护上的困扰。

    后来就有人发明 RESTful 这个概念,希望用 HTTP 的动作 ( Verb)一起去封装 CRUD 的行为。所以又多加了两个动作:

    • PUT : 更新 ( update )
    • DELETE : 删除 ( delete)

    而 Rails 的 Routing 也是依循这样的理念去设计。

    Rails 的基础 RESTful概念

    由于RESTful是个新手不容易一下子理解的概念,号称学 Ruby on Rails 初期最大障碍。

    在本篇尽量用浅显易懂的方式解释。如果看不懂也没关系,用背的!!

    一定要背起来!

    以下例子 做出 CRUD 功能的讨论版来解释:

    • 讨论版这个功能的名称: groups。Restful 的概念里面叫做 resources,“一组资源”。
      为了要控制它的运作,我们会创建一个新的 Controller文件 叫做 groups_controller.rb

    HTTP Verb 有四种:

    • 新增 (create,使用 POST )
    • 读取 (read,使用 GET )
    • 更新 (update,使用 PUT )
    • 删除 (destroy,使用 DELETE)

    在这组 controller 当中,我们会实作 7 个 Action ,4 张页面。

    • 首页( index ):用来列出所有的讨论版,可以选择各个单版 (使用 GET )
    • 各个讨论版专属页面(show):显示讨论版版名跟简介 (使用 GET )
    • 新增页面(new):里面会有表单,填完以后可以送出 (使用 GET )
    • 产生数据(create) :new 送出来的表单到 create 这个 action,新增一笔数据 ( 使用 POST )
    • 编辑页面(edit):里面会有表单呈现现有数据来,填完数据后可以送出 (使用 GET )
    • 更新数据(update):edit 送出来的表单可以到 update 这个 action,更新该笔数据 (使用 PUT )
    • 删除数据:送出删除请求,删除该笔数据(使用 DELETE)

    这七个 action ,是每个CRUD功能里最基本的动作。只要我们在 controller.rb 里定义 (def) 好这七个方法当作动作 (action)。其他的部分 Rails 就会帮我们处理了。

    像是设定 Routing (路由) 只需要简单一行:

    config/routes.rb resources :groups

    这样不管浏览器端跑来什么样的请求 (request) ,Routing都会聪明地帮我们导向正确的 action 去运作后续流程。

    网址对应关系

    对于网址跟对应的Action与页面来说

    • /groups/ 一定就是 index,首页,对应Routes路径: groups_path
    • /groups/123 一定就是 show,名字为123的讨论版个版页面,对应Routes路径: group_path(123)
    • /groups/123/edit 一定就是 edit,编辑讨论版123的表单页面,对应Routes路径:edit_group_path(123)
    • /groups/new 一定就是 new,新增讨论版的表单页面,对应Routes路径(或称为helper):new_group_path 总结

    所以制作一个 RESTful 风格的讨论版,我们仅需在Routes设定一行代码即可

    相关文章

      网友评论

          本文标题:【2017.3.15】Rails 的 CRUD 与 RESTfu

          本文链接:https://www.haomeiwen.com/subject/yziogttx.html