MVCのMは

吉見和也(Kazuya Yoshimi) 2007-11-22 02:14:15

メタボリックの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編集部の見解・意向を示すものではありません。

SpecialPR