メタボリックのM
というわけでtoytterもついにrailsの最重要ポイントの一つ、モデルを作っていきましょう。
railsのモデルのスーパークラスであるActiveRecordは、いわゆるO/Rマッパーなんですが、テーブル間の関係をプログラム上で定義することもできます。通常は外部キー使ってテーブルレベルで関係を定義するんでしょうが、後から変更したいと思ってもかなり面倒ですよね。それがプログラム上でできるんだから、恐ろしい仕様変更にも耐えられる柔軟さがRailsにはあります。
じゃあ、実際にどんな関連(アソシエーション)を作ったのか見て行きますね。
以前も張った図ですが、今回はこんな感じのテーブル構成にします
それぞれのテーブルに対して、一つずつモデルがありますので、今回は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編集部の見解・意向を示すものではありません。
- 前のエントリー: DB定義してURL定義して
- 次のエントリー: MVCのCは
「あとで読むRailsのススメ」 のバックナンバー
-
builder by ZDNet Japanに移行します
http://builder.japan.zdnet.com/member/u74891/blog/ZDNetが始めた技術者のためのポータル「builder」実はここのブログでプログラムのソースが含まれる記事を書いてるのって、私だけだったらしいですwで、builde... -
日時の表示フォーマット
-
acts_as_state_machine
-
restful_authentication
-
RSpecチュートリアルやってみる 最終回
- あとで読むRailsのススメ 一覧へ »
企画特集
-
情報セキュリティ対策を考える
人がいるところにリスクありと心得る -
佐々木俊尚×日立のキーパーソンが語る
2010年 ビジネスニーズが企業のクラウド化を加速 -
セキュリティとコスト削減
相反する要素を兼ね備えたビジネスPCを選ぼう -
クラウド戦略を実現するオープンソース
【事例セミナー】ドトール社に学ぶ最新 OSS 活用事例 -
ワンランク上の液晶一体型PC、登場!
なぜワンランク上なのか、その7つの特長を緊急報告! -
三拍子揃ったビジネスPCが登場
日本のオフィスに合った、コンパクトPCをHPが提供 -
セキュリティとコスト削減(モバイルPC)
6万円台モバイルPCにセキュリティソフトをバンドル -
安全で効率的なコンテンツ管理の実現
グローバルな情報活用基盤整備のためのイロハを学ぶ -
安全・安心・安価なクラウド型ホスティング
キャリアならではのパフォーマンス--その信頼性に迫る
新着企業動向
-
ビジネス公認アカウント済。選挙グッズサイトにて活用
有限会社スリーズコム -
成功事例に学ぶクライアントPC管理自動化セミナー
クオリティ -
電子メール誤送信防止パッケージ市場において3年連続でシェア1位を獲得
〜メール誤送信防止...
NTTソフトウェア -
メールセキュリティSaaS『Mail Luck!セキュアタイプ』
NTTPCコミュニケーションズ(ネットワーク事業部) - 企業動向一覧へ»