HeadFirst Ruby 第十五章总结 Saving and loading data
Posted fbsharl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HeadFirst Ruby 第十五章总结 Saving and loading data相关的知识,希望对你有一定的参考价值。
前言
在上一章讲述了如何进行基础的操作,比如 处理 GET 请求的 get route, 再比如下载 gem 等等方面的知识.
在这一章节,作者告诉我们如何储存、处理数据.
整个过程分三步走:
- 首先,当 user 提交了一个 form 之后, 我们需要 create 一个对应的 Movie 的 object.
- 然后,我们将 Ruby object 储存进一个格式为 .yml 的 file 中
- 当 user 点击一个 object 的 ID 之后,能够从 .yml 格式的 file 中得到一个新的 html 页面,进而获取详细信息.
1?? create 一个对应的 Movie 的 object
第一步: Setting the HTML form to send a POST request
原理:两个 attribute
首先,我们需要确保 POST 请求是完整的,因此在 HTML 的 <form>
tag 里,需要两个 attribute:
- method:即 POST 这个 HTTP method
- action:即提交到所在资源库的 path
格式:
<form method="post" action="/movies/create">
第二步: Setting up a post route
原理:
处理 GET 请求的 Sinatra 的 route 名字叫 get, POST 请求的叫 post.
params 是伴随 post 方法的一个参数,这个参数是一个 hash, 它包含了 form data from the request.
格式:
post(‘/movies/create‘) do
"Received: #{params.inspect}"
end
?过程三步走的第一步
首先,当 user 提交了一个 form 之后, 我们需要 create 一个对应的 Movie 的 object.
post(‘/movies/create‘) d0
@movie = Movie.new
@movie.title = params[‘title‘]
@movie.director = params[‘director‘]
@movie.year = params[‘year‘]
end
2?? 将数据存储在 .yml 格式的 file 中
关于 YAML
YAML 定义:
YAML 不是标记语言,而是一个 standard for representing objects and other data.
YAML 功能:
- 用于将 object 的数据储存成为字符串格式
- 相逆的,用于将字符串格式的内容转变为 object
与 Ruby 的关系
Ruby 中的 ‘yaml‘ 模块可以将 Ruby 中的 objects 转换为 YAML 格式的 file 储存起来.
格式:
require ‘yaml‘
该模块可供调用的 method
- dump 用于将 object 转换为一个 string
- load 用于将一个 string 转换为 object
关于 YAML::Store
‘yaml‘ 仅仅可以进行转换,而无法将其内容储存为一个 file在 YAML library 中包含了 YAML::Store 这个 class, 它可以将 object 储存为 disk 中的 file.
格式
调用库:
require ‘yaml/store‘
读写:
store = YAML:Store.new(‘my_file.yml‘)
?储存数据(过程三步走的第二步)
其格式与 hash 很相似,都需要一个 key 和一个响应的 value.
transaction是储存数据时需要执行的方法,用于 prevent other programs from writing to the file until the block exits.
store.transaction do
store["my key"] = "my value"
store["key two"] = "value two"
end
以上是关于HeadFirst Ruby 第十五章总结 Saving and loading data的主要内容,如果未能解决你的问题,请参考以下文章