OKADA LABO

[Ruby on rails]3つのテーブルをアソシエーションさせる時

たとえば、投稿者がツイートを登録するアプリがあるなら。

 

usersテーブル
tweetsテーブル

がデータベース上に必要になりますね。

 

では、tweet1件1件に、コメントを登録できるようにするにはどうなるか?

commentsテーブルが必要となります。

 

この3テーブルにアソシエーションを組むとき

 

userは
・複数のtweetsを持ってる
・複数のcommentsを持ってる

 

tweetは
・複数のcommentsを持ってる
・userに所属する(持たれてる) user_idカラムが必要になる

 

commentsは
・tweetに所属する tweet_idカラムが必要になる
・userに所属する user_idカラムが必要になる

 
これをmodelに設定すると
・持つ has_many
・所属する belongs_to

 

models/comment.rb

class Comment < ActiveRecord::Base

belongs_to :tweet #tweetsテーブルとのアソシエーション
belongs_to :user #usersテーブルとのアソシエーション
end

 
models/tweet.rb

class Tweet < ActiveRecord::Base
belongs_to :user
has_many :comments #commentsテーブルとのアソシエーション
end

 
models/user.rb

class User < ActiveRecord::Base
#deviseの適用記述など
has_many :tweets
has_many :comments #commentsテーブルとのアソシエーション
end