OnsenとRuby

Ruby初心者。というかプログラム初心者の日記。 

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でレコードを引張ってきてチェインでアクセサメソッドを呼び出すということだと思います。