バリケンのRuby日記 RSSフィード

2006-05-26

[] 勉強の方針どうしよう  勉強の方針どうしよう - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  勉強の方針どうしよう - バリケンのRuby日記  勉強の方針どうしよう - バリケンのRuby日記 のブックマークコメント

[] ActiveRecordを直接利用する  ActiveRecordを直接利用する - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  ActiveRecordを直接利用する - バリケンのRuby日記  ActiveRecordを直接利用する - バリケンのRuby日記 のブックマークコメント

あやうく関数型言語の魅力に取り付かれて、どこか遠いところに行っちゃうところだったよ。

ということで、リハビリのためRuby on RailsActiveRecordを生で触ってみることにするよ。

ActiveRecordRuby on Railsの一部で、リレーショナルデータベースRubyから利用するためのライブラリだよ。ActiveRecordを使うと、まるでオブジェクトを扱うかのようにリレーショナルデータベースアクセスすることができるよ。

じゃあ、ためしにこのあいだの日記で作ったusersテーブルにアクセスしてみることにするよ。

まずはデータベースへ接続するための「おまじない」だよ。

require '/usr/share/rails/activerecord/lib/active_record.rb'

ActiveRecord::Base.establish_connection(
  :adapter  => 'postgresql',
  :host     => 'localhost',
  :username => 'rubyonrails',
  :password => (設定したパスワード),
  :database => 'wdpress'
)

次に、usersテーブルにアクセスするためのUserクラスを生成するよ。

class User < ActiveRecord::Base
end

usersテーブルに、三つのレコードを追加してみるよ。

User.create(
  :name        => 'username1',
  :password    => 'password1'
)

User.create(
  :name        => 'username2',
  :password    => 'password2'
)

User.create(
  :name        => 'username3',
  :password    => 'password3'
)

じゃあ、逆側から2つの要素を取り出してみるよ。

User.find(:all, :limit => 2, :order => "id desc").each do |user|
  puts user.name
end

実行結果だよ。

username3
username2

次は、「user」という文字列がユーザー名に含まれているユーザーを出力するよ。

User.find(:all, :conditions => "name like '%user%'").each do |user|
  puts user.name
end

実行結果だよ。

username1
username2
username3

こんどは、ユーザーの数を数えてみるよ。2行目は「password3」というパスワードを設定しているユーザーの数を数えるよ。

puts User.count
puts User.count(['password = ?', 'password3'])

実行結果だよ。

3
1

最後に、ちょっと変わったメソッド名でアクセスしてみるよ。メソッド名が動的に定義されるんだねえ。

User.find_all_by_name('username3').each do |user|
  puts user.password
end

実行結果だよ。

password3

ActiveRecordを使うと、リレーショナルデータベースの知識がほとんどなくても、リレーショナルデータベースへ簡単にアクセスすることが出来るね。すごいなあ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20060526