iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Software Development

Rails 開發,每日一套件介紹! 系列 第 2

Day 2:狡詐的偏執狂,你的資料真的都刪除了嗎? - Paranoia

  • 分享至 

  • xImage
  •  

Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
Rails 開發,每日一套件的第二天,就讓我們循序漸進,輕鬆認識 Rails 開發好用的 30 個套件吧!
相信跟著我一起走完這段旅程,您也能建立出自己的常用套件庫,甚至鑑別什麼是好的套件喔!

Day 2: Paranoia

過去曾經建立在網站上的個人資訊,只要選擇刪除,它就真的會從資料庫中刪除嗎?
答案是不一定的。其實這完全端看開發者如何決定 ”刪除“ 你的資料。

今天要講的套件 Paranoia,一個看起來很難記憶的名字,不過一旦一了解它的名稱與功能,想忘記都很難。Paranoia 中文翻譯為 ”偏執狂“,而這個套件最大的功能就是,假裝刪除一筆資料!

過往我們認知的刪除資料,是從資料庫中抹除掉一筆資料,不留下痕跡。
而 Paranoia 的做法是,在資料庫中創建一個欄位叫 deleted_at。並且在使用者使用刪除功能的時候,寫入刪除時間,並且讓這筆資料看起來像是刪除了!業界行之有年,並稱之為軟刪除(soft-deleted)

其實這個功能,自己寫也不是太困難,尤其對會來 IThome 看文章的人,這應該根本小菜一碟。
不過既然有人都幫你寫完了,你只要加一兩行字就能啟用,何樂而不為呢~

所謂的技術堆疊、知識堆疊,不就是這樣嗎?
就不要浪費時間在寫這種小功能上了,裝個套件搞定,繼續往下一步吧!

安裝方式

首先在終端機輸入:

bundle add paranoia

接著輸入創造一個描述檔(migration),給你想要使用的資料表。

rails g migration AddDeletedAtToClients deleted_at:datetime:index

其中的 Clients,請自行替換成你要使用的資料表 (table)。
下面用 user 當作範例,會創造出一個如下的描述檔:

class AddDeletedAtToUsers < ActiveRecord::Migration
  def change
    add_column :users, :deleted_at, :datetime
    add_index :users, :deleted_at
  end
end

執行rails db:migrate
然後在 model 中寫入一行 acts_as_paranoid(表現得像個偏執狂一樣XD)
一樣以 User 這個 model 為例:

class User < ActiveRecord::Base
  acts_as_paranoid

  # ...
end

這裡做完後,差不多就結束了。之後只要是對 User 呼叫 destroy,就會預設寫入時間進入 deleted_at 這個欄位,並且假裝像是刪除了一樣,不過其實資料還在。

其實我第一次知道的時候,不算太意外。在數位行銷圈打滾過,大概心裡有個底,覺得自己個資肯定早就到處都是了。
不過心想大概是這樣,跟實際親自去做,還是有差。總而言之,大家在網站上要留下個資,一定還是要謹慎一點。

最後補上一點小客製,如果你不想用 deleted_at 這個欄位名稱,想自己取一個,只要在acts_as_paranoid後方加上column: :想要的欄位名稱 就好了

class User < ActiveRecord::Base
  acts_as_paranoid column: :destroyed_at

  ...
end

剩下的就留給大家自己去研讀,其實這超簡單,不過真的很方便,絕對值得收入必裝套件之一
我們明天再見!


上一篇
Day 1: 輕量型、極度便利的開信工具 - letter_opener
下一篇
Day 3: 比 id 更友善的 id - friendly_id
系列文
Rails 開發,每日一套件介紹! 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言