Railsでコンソールをもっと使って学習していこうと思い、コンソールでの基礎的なデータ編集のやり方をまとめました。
irbとは
「Interactive Ruby」の略。Rubyにデフォルトで用意されているデバックツール。
pryとは
pryの語源はよくわからなかったが、これもRailsに用意されたデバックツール。使用するにはGemのインストールが必要。Syntaxの色付けやインデントがされていて、irbよりも見やすいかも。
pry-byebugも一緒に入れると、binding.pryでプログラムを止めた際に1行ずつプログラムを先に進めるなどデバックをする際にできることが増える。
pry-byebugに関する参考記事
pryのインストール
Gemfileに以下のコードを追記し、ターミナルで$ bundle install
をすれば使えるようになります。
gem 'pry-rails', :group => :development
gem 'pry-byebug', :group => :development
コンソールでデータベースの操作
コンソールの立ち上げ・抜け出し
$ rails c
で立ち上げ、exit
もしくはCtrl+D
で抜け出せる。
レコードの作成
レコードを作成する際は、createメソッドを使う。createの後に”!”(エクスクラメーションマーク)をつけると、データの作成に失敗した時エラーを返してくれます。
[1] pry(main)> モデル名.create(カラム名:"カラムの値")
実行例
[1] pry(main)> User.create!(name: "山本 一郎", age: 47, address: "福島県")
TRANSACTION (0.1ms) BEGIN
User Create (2.6ms) INSERT INTO "users" ("name", "age", "address", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "山本 一郎"], ["age", 47], ["address", "福島県"], ["created_at", "2024-02-16 05:38:59.249919"], ["updated_at", "2024-02-16 05:38:59.249919"]]
TRANSACTION (0.9ms) COMMIT
=> #<User:0x00000001623dc508
id: 1,
name: "山本 一郎",
age: 47,
address: "福島県",
created_at: Fri, 16 Feb 2024 05:38:59.249919000 UTC +00:00,
updated_at: Fri, 16 Feb 2024 05:38:59.249919000 UTC +00:00>
レコードの取得
all
allメソッドで、そのテーブル(モデル)のレコードを全て取得できる。
[1] pry(main)> モデル名.all
#例
[1] pry(main)> User.all
find
findメソッドでレコードのidから取得できる。
[1] pry(main)> モデル名.find(id)
#例
[1] pry(main)> User.find(1)
#複数でも指定できる
[1] pry(main)> User.find(1, 3)
find_by
find_byメソッドで特定の条件にマッチした最初のレコードを取得できる。条件を指定して複数取得する場合はwhereメソッドを使う。
[1] pry(main)> モデル名.find_by(条件)
#例
[1] pry(main)> User.find_by(address: "静岡県")
where
whereメソッドで特定の条件にマッチしたレコードを複数で取得できる。
[1] pry(main)> モデル名.where(条件)
レコードの内容変更
update
updateメソッドで指定したレコードの値を変更できる。
[1] pry(main)> 対象.update(カラム名1:値1, カラム名2:値2, カラム名3:値3,,,)
#例
[13] pry(main)> User.find_by(name: "山本 一郎").update(address: "山形県")
レコードの削除
destroy
destroyメソッドでレコードを1つだけ削除できる。対象のレコードだけでなく、関連づけられたデータも自動的に削除される。
[1] pry(main)> 対象.destroy
#例
[1] pry(main)> User.find(1).destroy
destroy_all
destroy_allメソッドで複数の指定したレコードを削除できる。whereと一緒に使われる。対象のレコードだけでなく、関連づけられたデータも自動的に削除される。
[1] pry(main)> 対象.destroy_all
#例
[1] pry(main)> User.where(id:2..3).destroy_all
delete
deleteメソッドは、destroyメソッドと同じく1つのレコードを削除するメソッドだが、関連付けられたデータは削除されない。
[1] pry(main)> 対象.delete
#例
[1] pry(main)> User.find(1).delete
delete_allメソッドも、destroy_allメソッドと同じく指定した複数のレコードを削除するメソッドだが、関連付けられたデータは削除されない。
参考にしたサイト
- 【Rails】コンソールからモデルを使ってテーブルの一覧表示やデータ追加・更新・変更・削除する方法(データベース操作)
- しっかり使い分け!Railsでのfind, find_byの違い、使い方
- 【Rails入門】consoleの使い方まとめ
- RailsコンソールでModelを操作する