アソシエーションの便利さを痛感
TECH::CAMPで勉強を始めてから12週。
今回もオリジナルアプリの作成で学んだことをアウトプットします。
今回は、アソシエーション組んであることによって感じた便利なこと。
アソシエーションとは?
上図のような感じで、
postsはusers・likes・comments と紐づいていること。
この関係性はモデルファイルに記入します。
post.rb
class Post < ApplicationRecord
belongs_to :user
has_many :likes
has_many :comments
end
1つのpostは一人のユーザーしか持たない。(belongs_to :user)
1つのpostは複数のlikeを持つ。(has_many :users)←manyなので複数形
1つのpostは複数のcommentを持つ。(has_many :comments)←上に同じ
こうすることにより、関連付けられたモデルを、コントローラーで定義しなくてもビューで使えるようになったりします。
例えば、postsコントローラーのindexメソッドがこうだった場合
def index
@posts = Post.all
end
ユーザーに関しては何も定義していませんよね。
だけど、posts/index.erbファイルで
<% @posts.each do |post| %>
<%= post.user.nickname %> ←usersテーブルのnicknameカラムの値を引っ張れる!
<%= post.product %>
<%= post.stars %>
<% end %>
という風に、異なるモデル間で値のやりとりが可能になります。
便利ですね!