Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
Rails 開發,每日一套件的第二天,就讓我們循序漸進,輕鬆認識 Rails 開發好用的 30 個套件吧!
相信跟著我一起走完這段旅程,您也能建立出自己的常用套件庫,甚至鑑別什麼是好的套件喔!
過去曾經建立在網站上的個人資訊,只要選擇刪除,它就真的會從資料庫中刪除嗎?
答案是不一定的。其實這完全端看開發者如何決定 ”刪除“ 你的資料。
今天要講的套件 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
剩下的就留給大家自己去研讀,其實這超簡單,不過真的很方便,絕對值得收入必裝套件之一。
我們明天再見!