こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。
このブログでは、
僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、
ノウハウなどを書いていきます。
今回は、
- 【Rails】論理削除を有効にする方法【paranoia discard】
について書いていきます。
【Rails】論理削除を有効にする方法【paranoia discard】
論理削除とは
実際にはデータを削除せず、
削除されたというフラグを立て、
ユーザーには削除されたように見せること。
復元や参照が可能。
物理削除とは
データベースから削除すること。
復元したり参照は出来ない。
論理削除を有効にするための3ステップ
- 1、paranoiaというgemをインストール
- 2、モデルにdeleted_atというカラムを追加する
- 3、active_record.rbにacts_as_paranoiaと追記する
class ApplicationRecord < ActiveRecord::Base acts_as_paranoia ←追記 self.abstract_class = true end
論理削除ができてるかを確認する流れ
- rails cでサンプルオブジェクトを作ってから、DBに入る
rails dbconsole
- projectsテーブルにオブジェクトがあることを確認(テーブルは複数形)
select * from projects; 1 | bug1 | open | | 2019-02-14 01:47:51.525483 | 2019-02-14 02:59:10.62197 (1 row)
- rails cでオブジェクト取得
Project.find(1) Project Load (0.5ms) SELECT "projects".* FROM "projects" WHERE "projects"."deleted_at" IS NULL AND "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] => #<Project id: 1, title: "bug1", status: "open", deleted_at: nil, created_at: "2019-02-14 01:47:51", updated_at: "2019-02-14 01:47:51">
- オブジェクトを削除
Project.destroy(1) Project Load (0.6ms) SELECT "projects".* FROM "projects" WHERE "projects"."deleted_at" IS NULL AND "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] (0.3ms) BEGIN Project Update (0.5ms) UPDATE "projects" SET "deleted_at" = $1, "updated_at" = $2 WHERE "projects"."id" = $3 [["deleted_at", "2019-02-14 02:54:25.740623"], ["updated_at", "2019-02-14 02:54:25.740812"], ["id", 1]] (6.0ms) COMMIT => #<Project id: 1, title: "bug1", status: "open", deleted_at: "2019-02-14 02:54:25", created_at: "2019-02-14 01:47:51", updated_at: "2019-02-14 02:54:25">
- 削除できていることを確認
irb(main):005:0> Project.find(1) Project Load (0.6ms) SELECT "projects".* FROM "projects" WHERE "projects"."deleted_at" IS NULL AND "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
- 論理削除なのでデータの取得は可能
irb(main):006:0> Project.with_deleted.find(1) Project Load (0.4ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] => #<Project id: 1, title: "bug1", status: "open", deleted_at: "2019-02-14 03:16:37", created_at: "2019-02-14 01:47:51", updated_at: "2019-02-14 03:16:37">
- 削除したオブジェクトを復元
irb(main):007:0> Project.with_deleted.find(1).restore Project Load (0.4ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] (0.2ms) BEGIN Project Update (0.3ms) UPDATE "projects" SET "deleted_at" = $1, "updated_at" = $2 WHERE "projects"."id" = $3 [["deleted_at", nil], ["updated_at", "2019-02-14 03:16:57.013128"], ["id", 1]] (40.8ms) COMMIT => #<Project id: 1, title: "bug1", status: "open", deleted_at: nil, created_at: "2019-02-14 01:47:51", updated_at: "2019-02-14 03:16:57">
- 復元できていることを確認
irb(main):008:0> Project.find(1) Project Load (0.7ms) SELECT "projects".* FROM "projects" WHERE "projects"."deleted_at" IS NULL AND "projects"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] => #<Project id: 1, title: "bug1", status: "open", deleted_at: nil, created_at: "2019-02-14 01:47:51", updated_at: "2019-02-14 03:16:57">
以上です!
paranoia gem は非推奨
paranoiaのREAD.MEで、
paranoiaは非推奨になった旨が追記されています。
https://github.com/rubysherpas/paranoia
今後は下記の 「discard」 を使うようにしましょう。
https://github.com/jhawthorn/discard
RailsやRubyを学びたい人へ
RailsやRubyを学びたい人は、
RailsHack(レイルズハック)という、
最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、
Udemy で下記のコースを受講すると良いです★
✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座
✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】 <- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。
✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう
また、
Udemy は定期的にセールをやっていますし(90%OFFとかもザラ)、
「30日間なら返金できる」ので、
満足できなかった時でも安心です。
【公式】RailsHack(レイルズハック)
【公式】Udemyで学んでみる
最後に
下記の表に、
フリーランスエンジニア向けの人気エージェントをまとめてみました。
エージェント選びで悩んでいる方は是非参考にしてみてくださいね★
エージェント | 詳細 | 最高単価/月 | 設立 |
---|---|---|---|
ココナラテック(旧:フリエン)(furien) | 評判をチェック | 180万円/月 | 2011年 |
ギークスジョブ | 評判をチェック | 180万円/月 | 2011年 |
フォスターフリーランス | 評判をチェック | 230万円/月 | 1996年 |
pe-bank(pebank) | 評判をチェック | 200万円/月 | 1989年 |
Midworks(ミッドワークス) | 評判をチェック | 200万円/月 | 2013年 |
レバテックフリーランス | 評判をチェック | 140万円/月 | 2005年 |
あわせて読みたい