Check


プログラミングが無料で学べるYouTubeチャンネルを配信中!

RubyやPython、PHPやReactなど様々なプログラミング言語のチュートリアル動画が充実!

チャンネル登録はこちら

Ruby

【Ruby on Rails】簡単なメモアプリの作成|アソシエーションによるモデル同士のリレーションを実装

Ruby on Rails アソシエーションの実装

動画で解説を見る



開発環境

  • Ruby:version 3.1.2
  • Ruby on Rails:version 7.0.4
  • Visual Studio Code:version 1.73.0
  • OS:Windows10

Ruby on Railsでアソシエーションの実装手順

Ruby on Railsではモデルの関連付けを行うことにより、より直感的にコードが書きやすくなります。

今回はメモアプリの作成で使用した「アソシエーション」のコードを用いて解説していきます。

アソシエーションでモデルの関連付けを行うカラムの作成

まずはアソシエーションでモデルの関連付けを行うカラムの作成をしていきます。

マイグレーションファイルを作成できたら、テーブルにカラムを追加するコードを記述します。

add_columnで何のテーブルにカラムを追加するのかを指定することができ、その後にカラム名とデータ型を指定するという形になります。

マイグレーションファイルの作成と記述が完了しましたら、マイグレーションファイルをDBへ反映します。

「memo_app\db\schema.rb」のmemosテーブルにuser_idが反映されていれば成功です。

アソシエーションによる1対多の関連付け

次にアソシエーションによる1対多の関連付けをメモモデルに行います。

今回はuser_idのカラムを追加しているため、空白は許可しないというバリデーションを追加しています。

メモモデルからユーザーモデルを参照した場合は1対多の関係になるため、belongs_toというメソッドでメモモデルにあるuser_idがユーザーモデルの主キーであるidと関連付けているという処理をしています。

「モデル名_id」となっていれば省略できますが、今回はあえて厳密に明示する方法を知っていただきたいため、class_nameにはモデル名、foreign_keyには関連づいている外部キーを明示しています。

アソシエーションによる多対1の関連付け

次にアソシエーションによる多対1の関連付けをメモモデルに行います。

ユーザーモデルからメモモデルを参照した場合は多対1の関係になるため、has_manyというメソッドでユーザーモデルにあるidがメモモデルの外部キーuser_idと関連付けているという処理をしています。

メモモデルと同様に省略せずにclass_nameにはモデル名、foreign_keyには関連づいている外部キーを明示しています。

アソシエーションによるデータ取得

次にコントローラーでアソシエーションによるデータ取得を行います。

ログインしているユーザーのみの情報が一覧に表示されるようにするため、@memosには@current_user.memosを代入しています。

アソシエーションによってモデル同士が関連づいているため、ユーザーモデルで指定した「ユーザーインスタンス.memos」でユーザーに紐づいたデータ取得が可能になります。

ログインユーザーが投稿したメモだとわかるように、memosテーブルに追加したuser_idも保存されるように処理をしています。

また、ajax_createでは、indexアクションと同様に@memosにログインユーザーに紐づいたメモのデータ取得ができるように「ユーザーインスタンス.memos」としています。

おわりに

Ruby on Railsでアソシエーションの実装について解説してきましたが、いかがだったでしょうか。

最初はアソシエーションによるリレーションは難しいかもしれせんが、モデル同士の関連付けがわかるようになれば、データベースの設計やプログラムの処理もやりやすくなるかと思います。

是非、基本的な1対多や多対1のモデルの関連付けに挑戦してみてください。

Check


プログラミングが無料で学べるYouTubeチャンネルを配信中!

RubyやPython、PHPやReactなど様々なプログラミング言語のチュートリアル動画が充実!

チャンネル登録はこちら

-Ruby