Active Recordを使ってsqlite3操作。
Ruby/DBIを使ってSqlite3接続を勉強中。
dbh.do()でデータベースに接続してCRUD操作をやるとなるとSQL文の発行が多くなってしまう。
そこでRailsでも使われているActiveRecordをO/RマッパとしてCRUDしてみる。
まずは参考にしたサイトをご紹介しておきます。
=> http://ofps.oreilly.com/titles/9780596521424/activerecord_id347149.html
Rails 3 in a Nutshell
require "rubygems" require "active_record" ActiveRecord::Base.establish_connection( :adapter =>'sqlite3', :database =>'test01.db' ) class Drink < ActiveRecord::Base end drink = Drink.new drink.id = 1 drink.name = "CocaCola" drink.volume = 30 drink.save()
sqlite3はユーザーやpassという概念がないので:adapterと:databaseのみを指定。
今回はsqlite3であらかじめdrinks(Railsの規約で複数形)のテーブルを作っておきました。
Active Record モデルがActiveRecord::Base1を継承しています。
Drinkクラスは何も記述がありませんが、既に様々な機能が使えます。入力された項目のチェック等別の追加機能が必要な場合にここに付け加える必要があります。(上記で参考にしたオライリーのサイトではマクロ機能と呼ばれていました。)
drink.saveの時点でsqlのテーブルにデータが書き込みされます。
CRUDのCはこれで完了です。
DBから読み込みする場合には
class Drink < ActiveRecord::Base def to_s return "ProductID@#{id} Name:#{name} Volume:#{volume}ml" end end
Drinkクラスでto_sをオーバーライド。
Drink.find(:all).each do |i| puts i.to_s end
実行すると無事に結果が返ってきます。
ProductID@1 Name:CocaCola Volume:30 ProductID@2 Name:DEKAVITA Volume:20 ProductID@3 Name:SuperDRY Volume:25 ProductID@4 Name:Boss Volume:300ml
CRUDで残ったURの場合ですが、参考にしたサイトが13年春発売の宣伝ページのような物なので詳しく掲載されていませんでした。
既存のデータベースをを呼び出して更新と削除をしなさいと書いてあるのでfinderでレコードを引張ってきてチェインでアクセサメソッドを呼び出すということだと思います。