(PG)RailsではなくActiveRecordを単体で使う
動機
Todo管理プログラムを作った。
既にTodo管理プログラムは作っていたが、Todoアイテムの保存先が一般ファイルで作っていた。
それでもまったく問題ないのだけれど、DBに保存するのもやってみたいと思い、Railsに載せないActiveRecordで保存したいと思った。
それに今後バッチプログラム作成やテストデータ作成とかにも適用できそうで便利そう。
あとActiveRecordを使ったらカッコイイじゃんと思ってActiveRecord版を作ることにした。
ちなみに自分はRailsの学習中の身である上、ActiveRecordもまだあまり使ってない。
あたたかい目で見ていただき、ツッコミを入れてくくれたらうれしいです。
ソース
Todo管理プログラム全体のソースはGitHubに置いた。
本文
本エントリはActiveRecord単体で動かすポイントを書くこととする。
Ruby: 2.4.3p205
ActiveRecord: 5.1.5
sqlite3: 3.19.3
まずはActiveRecordをインストール。ターミナルで、
$ gem install activerecord
DBコネクションを張る
db = "./db/data.sqlite3" ActiveRecord::Base.establish_connection( "adapter" => "sqlite3", "database" => db )
テーブルを作る
ActiveRecord::Migration.create_table :tasks do |t| t.integer :priority t.string :title t.string :body t.timestamps end
tasksというテーブルを作成している。
ブロック内はテーブルのカラム。Taskクラス
class Task < ActiveRecord::Base def to_s "Priority: #{priority}, Title: #{title}, Body: #{body}" end end
実にあっけない、ActiveRecord::Baseを継承するだけ。
ちょっとハマったのがインスタンス変数(なのか?)である priority などの変数に@マークが付かないことだ。なぜだ?ひょっとしてメソッドなのか?
Taskクラスを使う
- tasksテーブルにレコードを保存する
Task.new( priority: priority.to_i, title: title.strip, body: body.strip ).save
- order by(順位づけ)して全レコードを取得する
tasks = Task.order("priority asc, title asc, body asc")
- taskレコードを更新する
task.update(priority: priority, title: title, body: body)
実に簡単だ。
課題
時間があったら以下について検討したい。
- テストを書こうか
- validatesを使おうか
- ActiveRecordのメソッドを調べたい
ActiveRecordを体系的に効率よく制覇するのにどうすればよいだろう?
Active Record の基礎
このあたりからやってみればよいのかな?