Ruby on RailsでUserモデルから異なるモデルをFollowする

 Railsを勉強する際の登竜門であるRails Tutorialを卒業したので、Rails Tutorialに載ってなかったけどサービスを実装する際に意外と役立つ技術を紹介しようと思います。

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

このチュートリアルではユーザーどうしのFollow機能を実装しているので、リレーションシップに関するコードはすべてUser.rbに記述されており、データベースの知識がないと理解するのが難しいようにも思えます。(きちんとチュートリアルの文章を読んで理解された方は、今回の方法も簡単に理解できると思います)

 

チュートリアルでは相互Follow機能が作成されていたのですが、今回はUserモデルから、SomeModelモデルをFollowするという、「片思い式」のFollow機能に挑戦します。

[User] ⇒ [SomeModel] って感じで。ちなみに、"SomeModel"は皆さんがリレーションシップを作成したいモデルの名前に変更してください。

 

まずはUser, SomeModelモデルを作成してマイグレーションします。(この辺はマスター出来てるものとして話を進めていきます)

 

次にモデルどうしのリレーションシップを登録するデータベースを作成するために、Migrationファイルを作成します。

 

リレーションシップ用のデータベースを作成する

 

マイグレーションファイルに、一意性を保つための記述をします。

gist6978841

 

この辺まではRails Tutorialと内容は同じです。

 

リレーションシップ用のデータベースが完成したら、次はモデルを編集してモデルどうしの関連付けをします。

モデルの関連付け

 

チュートリアルではUserモデルのみに関連付けの記述をしていたので気づかなかったかもしれないですが、Followされる方には実は何の設定もいらないのです!

 

最後にマイグレーションしてモデルは完成です。次にFollowボタンを設置しましょう。

 

gist6978884

 

gist6978890

 

Rails Tutorialと内容的にはほとんど同じなので大分端折りましたが、これで「片思い式」のFollow機能は完成しました。