« 日本とネットとパソコンと | トップページ | Ubuntuもモバイル重視 »

2008年2月21日 (木)

AcriveRecordをさわってみる その2

毎日更新の試みも後半戦にはいっていますが、もう毎日ネタさがしがしんどいです。。。
こういう時には「Tipネタ小出し」という姑息な手段に出ることにしましたw

先日ActiveRecordをちょっとだけさわってみましたが、もう少し理解を進めてみましょう。
2つのテーブルで一対一の関係をつくって操作してみます。

まずは、前回のデータベースに新しいテーブルを作ります。
---
> sqlite3 data.db
sqlite> create table comments(id integer primary key, article_id integer,comment string);
sqlite> insert into comments values(null, 1, "Nice to meet you");
sqlite> insert into comments values(null, 2, "Hajime mashite!");
sqlite> .quit
---

記事に対するコメントを格納するテーブル、ということにしました。
article_idカラムがarticlesテーブルのidと関連を持ちます。

これらのテーブルを一対一で関連付けてデータを参照してみましょう。
ar3.rb
===
ar3.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブル
class Article < ActiveRecord::Base
  has_one :comment
end

# authorsテーブル
class Comment < ActiveRecord::Base
  belongs_to :article
end

#コメントを持っている記事を表示
Article.find(:all).each{ |article|
  if !article.comment.nil?
    p "#{article.article}|#{article.comment.comment}"
  end
}

===

プログラムを実行すると、コメントが付いている記事のみを表示します。

  if !article.comment.nil?
    p "#{article.article}|#{article.comment.comment}"
  end

の部分で、articleオブジェクトからコメントデータを参照しているのがわかります。

関連付けは、Articleクラスの has_one、Commentクラスの belongs_toで行っています。
シンプルですね。

例では、テーブル名やカラム名の名前の付け方がまずいので"article.article"とか"comment.comment"とかクラス名メソッド名がダブって意味がわかりづらいですが、名前の付け方を工夫して、"document.article"とか"reader.comment"として処理を英文ライクにして意味をわかりやすくすることができると思います。

さて、短い時間で復習チックなプログラムを書いたら頭がスッキリしました(^^
ネタさがしするよりショートチップを作るほうが性に合うようです。

|

« 日本とネットとパソコンと | トップページ | Ubuntuもモバイル重視 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/125677/10619436

この記事へのトラックバック一覧です: AcriveRecordをさわってみる その2:

« 日本とネットとパソコンと | トップページ | Ubuntuもモバイル重視 »