课程复盘 | Rails 第三课:Rails 101(2)
课程目标
接下来会以一个“讨论版”为主题,实际让同学了解如何“从零打造”手写出一个网站。
这个讨论版会有:
- 使用者注册以及登录功能
- 开新讨论区、留言功能
- 加入讨论区、退出讨论区功能
- 权限管理功能
- 热门文章排序功能
- 了解什么是 RESTful
当你把这次应用程序实作完成,并上线后,你会学会:
- 怎么把需求变成会动的 Rails 应用程序
- 如何在 Rails 套版
- 如何制作使用者登录功能
- 重要 Rails 观念以及 API
- CRUD
- RESTful
- member, collection
- helper
- partial
- scope
- 找到 Rails 第三方 gem 的技巧
- 要怎么把你的应用程序放到网络上
这几乎是一个 Rails 新手应该学的一切了,有了这些基础技巧之后,你再学更难的技巧,或者是要自己做出复杂的东西,就不会那么容易失败了。
课程复盘
Rails 的 CRUD 与 RESTful
HTTP 请求( Request)与 HTTP 动作 ( Verb)
一般网页的运作原理是这样的:
- 使用者在浏览器输入了某个网址,点击了某个连结。这都叫发出 HTTP 请求 ( Request)。
- 而浏览器回应之后:产生页面,或者是重新导向。这都叫 HTTP 回应( Response)。
一般来说,使用者最常使用的是两种类型 / 动作 ( Verb )的请求: GET 与 POST。
- GET :输入网址,点击某些网址。这都是 GET。
- POST:送出表单。这叫做 POST
RESTful 的基础概念
因为 CRUD 是常见的操作行为,但是大家实作的方式、与网址设计方式不一样。造成很多维护上的困扰。
后来就有人发明 RESTful 这个概念,希望用 HTTP 的动作 ( Verb)一起去封装 CRUD 的行为。所以又多加了两个动作:
- PUT : 更新 ( update )
- DELETE : 删除 ( delete)
而 Rails 的 Routing 也是依循这样的理念去设计。
Rails 的基础 RESTful概念
由于RESTful是个新手不容易一下子理解的概念,号称学 Ruby on Rails 初期最大障碍。
在本篇尽量用浅显易懂的方式解释。如果看不懂也没关系,用背的!!
一定要背起来!
以下例子以 第三章, 做出 CRUD 功能的讨论版来解释:
- 讨论版有个群组叫: groups。在 Restful 的概念里把这个 groups 叫做 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 (路由) 只需要简单一行:
|
|
这样不管浏览器端跑来什么样的请求 (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设定一行代码即可