2007年08月05日

[Ruby] ActiveRecord を単体で(Railsアプリの外で)使う

 
 Railsで使われている O/Rマッピングのライブラリ「ActiveRecord」は、単体でも(Railsアプリの中じゃなくてもという意味)使えます。

 DBの参照/更新をするためのコードが とても短く簡単に書けるので、テストデータ投入とかバッチ処理を作るのに気軽に作れて良いかもしれません。

 Railsでテストデータを入力/編集するための画面を作ったり(、うっかり凝ったものにして無駄に時間がかかったりしたり)、ActiveRecordでバッチ的な役割のプログラムを書いたりすることで、Rubyを「開発の補助」的に使ってみた後で、慣れたら実際にプロジェクトで使ってみる。とかいう導入の仕方はありなんじゃないかなーと思います。
 ※自分的には ずっと補助的な使い方のままでもいい気がするけど :P


例1:参照するだけ
#!/usr/bin/ruby

require "rubygems"
require "active_record"

# DB接続 (例2と例3は ここは省略)
ActiveRecord::Base.establish_connection(
  :adapter  => "mysql",
  :host     => "localhost",
  :username => "xxxxxx",
  :password => "xxxxxxx",
  :database => "xxxxxx",
  :socket   => "/var/lib/mysql/mysql.sock",
  :encoding => "utf8"
)

# users テーブルにアクセスするためのクラスを宣言
class User < ActiveRecord::Base
end

# 全てのレコードについてループ
User.find(:all).each { |user|
  # 各レコードのフィールド(*)にアクセス
  #  * この例では usesrテーブルの nameフィールド
  p user.name
}


例2: insertする
#   :

# users テーブル
class User < ActiveRecord::Base
end

# insertする
User.create(
  :name     => "takaaki",
  :nickname => "jakoten",
  :profile  => "hello world!"
)


例3: 多対多の関連





テーブル定義は前に出した例で。

#   :

# products テーブル
class Product < ActiveRecord::Base
  has_and_belongs_to_many :customers, :join_table => 'orders'
end

# customers テーブル
class Customer < ActiveRecord::Base
  has_and_belongs_to_many :products, :join_table => 'orders'
end

# 全員が全部の商品を買ったことにする
Customer.find(:all).each { |user|
  Product.find(:all).each { |product|
    user.products << product
  }
}



Rails についてはこの本が効率的にいろいろ覚えられるので良い。

Railsレシピブック 183の技Railsレシピブック 183の技
著者:高橋 征義
販売元:ソフトバンククリエイティブ
発売日:2008-05-31
おすすめ度:4.5
クチコミを見る



takaaki_bb at 00:08│Comments(0)TrackBack(0)clip! tips (Ruby) | tips

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔