Ruby on Rails Model 基本操作之 CRUD CRUD 之 C(Create)

什麽是 ORM?
ORM 是 Object Relational Mapping 的缩写,中⽂翻译成「物件关系对映」。我们
如果想要存取资料库里的内容,在以前必须⾃⼰撰写资料库查询语⾔(SQL)对资
料库进⾏查询,但透过 ORM 的包装之後,可以让我们⽤操作「物件」的⽅式来操
作资料库。例如如果我想要找出所有 users 资料表里的资料:
User.all
这句透过 ORM 的转换之後会变成:
select * from users;
CRUD 之 C(Create)
要透过 Model 新增⼀笔资料有 new 跟 create 这两种⽅式。使⽤ new ⽅法做
出⼀个 Model 物件後,再执⾏ save ⽅法即可把该笔资料存入资料表:

user = Candidate.new(name: "孙悟空", age: 18)
user.save

当执⾏ save ⽅法的时候,Model 会产⽣这样的 SQL 语法,把资料写入
candidates 资料表:

INSERT INTO "candidates" ("name", "age", "created_at", "updated_a
16 Model 基本操作
243
t") VALUES (?, ?, ?, ?) [["name", "孙悟空"], ["age", 18], ["creat
ed_at", "2017-06-28 02:42:27.066729"], ["updated_at", "2017-06-28
02:42:27.066729"]]

除了 new + save ⽅法可以新增资料,使⽤ create ⽅法也可新增资料,但不
需要执⾏ save ⽅法即可写入资料表:
Candidate.create(name: "孙悟空", age: 18)
new 跟 create 的差别,就是 new ⽅法只是先把物件做出来,除非执⾏了
save ⽅法,资料不会存入资料表;⽽ create ⽅法则是直接把存入资料表。不
管是 new 或 create ,在写入失败的时候都会回传⼀个「内容都是 nil 的 Model
物件」(注意,不是回传 nil 物件喔),通常在 Controller 的 Action 里常会藉此
判定资料写入是否成功:

class PostsController < ApplicationController
# ...[略]...
def create
@post = Post.new(post_params)
if @post.save # 如果存档成功...
redirect_to @post, notice: 'Post was successfully created.'
else
render :new
end
end
end

另外, create ⽅法有另⼀个叫做 create! 的兄弟⽅法(没错,就是後⾯加了惊
叹号版本的),它跟 create ⽅法⼀样会把资料直接写入资料表,当资料写入发⽣
错误时, create ⽅法会默默的回传 nil (事实上是⼀个 Model 物件),⽽
create! ⽅法则会产⽣例外(Exception)讯息。

参考资料

[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html


<<:  [重构倒数第14天] - Vue3处理动态效果(二)

>>:  关於数据分析在做什麽...

14. STM32-透过SPI驱动MCP2515实现CAN(下)

对於MCP2515 DataSheet还不太清楚的话,可以看看上一篇针对DataSheet有些说明~...

Day12 Docker File

昨天已经用PostgreSQL做了范例,今天要轮到PHP当主角了,从DockerHub下载下来最原始...

Day 9 合格了吗?

启动引擎,把车开回夜晚的车阵中,虽然可能只是处在车流中,默默无名的行驶着,或者快速的疾驶着,又或者处...

[Day16] 再战SAT

今天花了一整天Debug,一直看为甚麽「Not Work」,单纯纪录一下流程。 今日目标 修好昨天的...

Angular-介绍(Day14)

好的,在我们结束Spring Boot API的架设後,再来我们要开始进入前端框架-Angular的...