(PG)RailsではなくActiveRecordを単体で使う

動機

Todo管理プログラムを作った。
既にTodo管理プログラムは作っていたが、Todoアイテムの保存先が一般ファイルで作っていた。

それでもまったく問題ないのだけれど、DBに保存するのもやってみたいと思い、Railsに載せないActiveRecordで保存したいと思った。

それに今後バッチプログラム作成やテストデータ作成とかにも適用できそうで便利そう。

あとActiveRecordを使ったらカッコイイじゃんと思ってActiveRecord版を作ることにした。

ちなみに自分はRailsの学習中の身である上、ActiveRecordもまだあまり使ってない。
あたたかい目で見ていただき、ツッコミを入れてくくれたらうれしいです。

ソース

Todo管理プログラム全体のソースはGitHubに置いた。

ARTodoList

本文

本エントリは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 の基礎
    このあたりからやってみればよいのかな?

    それよりもRailsチュートリアルが先か。