ZDNet Japan Brand Site:
ZDNet Japan
builder

メタボリックのM

というわけでtoytterもついにrailsの最重要ポイントの一つ、モデルを作っていきましょう。

railsのモデルのスーパークラスであるActiveRecordは、いわゆるO/Rマッパーなんですが、テーブル間の関係をプログラム上で定義することもできます。通常は外部キー使ってテーブルレベルで関係を定義するんでしょうが、後から変更したいと思ってもかなり面倒ですよね。それがプログラム上でできるんだから、恐ろしい仕様変更にも耐えられる柔軟さがRailsにはあります。

じゃあ、実際にどんな関連(アソシエーション)を作ったのか見て行きますね。

以前も張った図ですが、今回はこんな感じのテーブル構成にします

erd.jpg

それぞれのテーブルに対して、一つずつモデルがありますので、今回は3つのモデルを作成します。それぞれに書いたアソシエーションはこんな感じ

■app/models/friendship.rb

 

belongs_to :user

 

belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"

 

■app/models/user.rb

 

has_many :friendships

 

has_many :friends, :through => :friendships

has_many :followerships, :class_name => "Friendship", :foreign_key => "friend_id"

has_many :followers, :through => :followerships, :source => :user

has_many :statuses

 

■app/models/status.rb

 

belongs_to :user

 

user.rbではいろんなことを書いてますが、要はUserはFriendshipを経由してUserとつながってますよってことで、いわゆる自己参照結合ってのを実現しています。

正直、このブログが初心者向けなのか、ある程度Rails知っている人向けなのか定まらないまま書いてしまっていてカオスなのは、こいつが少々複雑でこの場で初心者向けに説明する自信がなかったから。この際きっぱりと諦めて、おまじないってことで一つ

とりあえず「has_many」「has_one」「belongs_to」「has_and_belongs_to_many」「has_many :through」の5つを理解していれば、なんでもできますよ、きっと、多分、押忍

※このエントリはZDNetブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet編集部の見解・意向を示すものではありません。

記事の感想やご意見をコメントでお寄せください
ニックネーム
コメント
画像認証
※左側に表示されている英数字を入力してください。
投稿されたコメントはサービス利用規約に従って取り扱われます。

「あとで読むRailsのススメ」 のバックナンバー

http://japan.zdnet.com/blog/yoshimi/2007/11/22/entry_27016437/
MVCのMは

ZDNet Japan ニューズレター

企業情報システムの選択、導入、運用管理に役立つ情報を毎朝メール配信します。

ニューズレターの登録・登録情報変更 »